选定行的WPF DataGrid RowStyle不更改背景和前景颜色
我正在windows 7上使用Visual Studio 2012。我需要知道为什么网格选定行的以下样式不适用于背景色和前景色,但适用于其他属性,如BorderBrush和BorderThickness等,效果非常好?虽然我可以看到鼠标在网格行上移动时它们在变化选定行的WPF DataGrid RowStyle不更改背景和前景颜色,wpf,datagrid,background-color,Wpf,Datagrid,Background Color,我正在windows 7上使用Visual Studio 2012。我需要知道为什么网格选定行的以下样式不适用于背景色和前景色,但适用于其他属性,如BorderBrush和BorderThickness等,效果非常好?虽然我可以看到鼠标在网格行上移动时它们在变化 <Style x:Key="gridRowStyle" TargetType="{x:Type DataGridRow}"> <Style.Triggers> <Trigger Pr
<Style x:Key="gridRowStyle" TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="PeachPuff"/>
<Setter Property="Foreground" Value="BlueViolet"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="PeachPuff"/>
<Setter Property="Foreground" Value="BlueViolet"/>
<Setter Property="BorderBrush" Value="BlueViolet" />
<Setter Property="BorderThickness" Value="2" />
</Trigger>
</Style.Triggers>
</Style>
下面是我如何在网格上使用的
<DataGrid RowStyle="{StaticResource gridRowStyle}">
我强调知道“为什么”而不是问题的解决方案,因为如果我使用网格单元样式而不是行样式,我已经有了问题的解决方案,如下所示:
<Style x:Key="gridCellStyle" TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="PeachPuff"/>
<Setter Property="Foreground" Value="BlueViolet"/>
</Trigger>
</Style.Triggers>
</Style>
在DataGridCell的默认样式中,具有以下默认样式触发器
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
<Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
因此,如果您为DataGridRow编写触发器,那么它将只应用于在可视化树中放置在DataGridCell之前的元素
因此,要在选择时更改背景和前景,必须以DataGridCell样式写入触发器或从样式中删除默认触发器。只需在datagrid的行级别删除此属性,它们的优先级高于触发的属性
nezac可能是因为GridCell内容覆盖了GridRow?你试过查看Snoop中的控件吗?我用你发布的内容快速测试了一下,效果很好。您能提供更多关于DataGrid和任何行定义的详细信息吗?我是WPF新手,以前从未使用过snoop。我会试试看到底发生了什么。谢谢…@BrentStewart,这里是DataGrid的完整定义:其中RecordList是简单类Record对象的自定义集合,它有两个公共属性FirstName和LastName,这两个属性在当前窗口资源中定义:public class Record{public string FirstName{set;get;}public string LastName{set;get;}}公共类MyCollection:ObservableCollection{}