如何设置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事件的一些原因不起作用
- 样式设置为DataGridCell
- 使用模板列
- 触发器在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>