如何设置DataGrid中选定行的颜色

这似乎是一个没有头绪,但我不知道该怎么做。

DataGrid中选定行的默认背景颜色太深,以致于无法读取它。 有没有压倒一切呢?

试了这个(从Neverminds链接修改)

<dg:DataGrid.RowStyle> <Style TargetType="{x:Type dg:DataGridRow}"> <Style.Triggers> <Trigger Property="IsSelected" Value="True" > <Setter Property="Background" Value="Gainsboro" /> </Trigger> </Style.Triggers> </Style> </dg:DataGrid.RowStyle> 

但还是没有…

上面的解决scheme在我的情况下在每个单元格周围留下了蓝色边框

这是为我工作的解决scheme。 这很简单,只需将其添加到您的DataGrid 。 您可以将其从SolidColorBrush更改为任何其他画笔,如线性渐变。

 <DataGrid.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FF0000"/> </DataGrid.Resources> 

得到它了。 在DataGrid.Resources部分中添加以下内容:

  <DataGrid.Resources> <Style TargetType="{x:Type dg:DataGridCell}"> <Style.Triggers> <Trigger Property="dg:DataGridCell.IsSelected" Value="True"> <Setter Property="Background" Value="#CCDAFF" /> </Trigger> </Style.Triggers> </Style> </DataGrid.Resources> 

作为@Seb Kade的回答,您可以使用以下Style完全控制所选和未选定行的颜色:

 <Style TargetType="{x:Type DataGridRow}"> <Style.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" /> <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" /> </Style.Resources> </Style> 

你当然可以input你喜欢的颜色。 此Style也适用于其他收集项目,例如ListBoxItem (例如,如果用TargetType="{x:Type DataGridRow}"replaceTargetType="{x:Type DataGridRow}" )。

我有这个问题,我几乎把我的头发,我无法在网上find合适的答案。 我试图控制在WPF DataGrid中选定的行的背景颜色。 它只是不会做到这一点。 在我的情况下,原因是我的数据网格中也有一个CellStyle,CellStyle覆盖了我设置的RowStyle。 有趣的是,因为CellStyle甚至没有设置背景颜色,而是由RowBackground和AlternateRowBackground属性设置。 尽pipe如此,尝试设置所选行的背景颜色在我这样做时根本不起作用:

  <DataGrid ... > <DataGrid.RowBackground> ... </DataGrid.RowBackground> <DataGrid.AlternatingRowBackground> ... </DataGrid.AlternatingRowBackground> <DataGrid.RowStyle> <Style TargetType="{x:Type DataGridRow}"> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="Pink"/> <Setter Property="Foreground" Value="White"/> </Trigger> </Style.Triggers> </Style> </DataGrid.RowStyle> <DataGrid.CellStyle> <Style TargetType="{x:Type DataGridCell}"> <Setter Property="Foreground" Value="{Binding MyProperty}" /> </Style> </DataGrid.CellStyle> 

当我将所选行的所需样式移出行样式并转换为单元格样式时,它确实起作用,如下所示:

  <DataGrid ... > <DataGrid.RowBackground> ... </DataGrid.RowBackground> <DataGrid.AlternatingRowBackground> ... </DataGrid.AlternatingRowBackground> <DataGrid.CellStyle> <Style TargetType="{x:Type DataGridCell}"> <Setter Property="Foreground" Value="{Binding MyProperty}" /> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="Pink"/> <Setter Property="Foreground" Value="White"/> </Trigger> </Style.Triggers> </Style> </DataGrid.CellStyle> 

只要发布这个,以防有人有同样的问题。

默认的IsSelected触发器会更改3个属性,Background,Foreground和BorderBrush。 如果你想改变边框以及背景,只需将其包含在你的风格触发器中即可。

 <Style TargetType="{x:Type dg:DataGridCell}"> <Style.Triggers> <Trigger Property="dg:DataGridCell.IsSelected" Value="True"> <Setter Property="Background" Value="#CCDAFF" /> <Setter Property="BorderBrush" Value="Black" /> </Trigger> </Style.Triggers> </Style> 

我经历了行select事件的一些原因不起作用

  1. 样式设置为DataGridCell
  2. 使用模板列
  3. 触发器在DataGridRow中设置

这是对我的帮助。 为DataGridCell设置样式

 <Style TargetType="{x:Type DataGridCell}"> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="Green"/> <Setter Property="Foreground" Value="White"/> </Trigger> </Style.Triggers> </Style> 

而且因为我在里面使用一个带有标签的模板列,所以我使用RelativeSource绑定将Foreground属性绑定到容器Foreground:

 <DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Label Content="{Binding CategoryName, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" Foreground="{Binding Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1, AncestorType={x:Type DataGridCell}}}" Width="150"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> 

我已经尝试了ControlBrushKey,但它不适用于未选中的行。 未选定行的背景仍然是白色的。 但我设法发现,我必须重写rowstyle。

 <DataGrid x:Name="pbSelectionDataGrid" Height="201" Margin="10,0" FontSize="20" SelectionMode="Single" FontWeight="Bold"> <DataGrid.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FFFDD47C"/> <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#FFA6E09C"/> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Red"/> <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Violet"/> </DataGrid.Resources> <DataGrid.RowStyle> <Style TargetType="DataGridRow"> <Setter Property="Background" Value="LightBlue" /> </Style> </DataGrid.RowStyle> </DataGrid>