覆盖DataGrid前景
本文关键字:前景 DataGrid 覆盖 | 更新日期: 2023-09-27 18:19:37
我想覆盖WPF DataGrid中所选DataGrid行的前景色。
前景列前景是在定义中设置的。
<DataGrid.Columns><DataGridTextColumn Foreground="Black"/>
我创建了一个新的DataGridCell样式。但这只适用于未设置前景色的列。
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="BlueViolet" />
<Setter Property="Foreground" Value="White" />
</Trigger>
</Style.Triggers>
</Style>
在WPF中,有一种叫做依赖属性值优先级的东西。请点击链接了解完整的详细信息,但简而言之,DependencyProperty
s可以从许多不同的来源更新:Animation
s、样式、代码隐藏等。(链接页面中)有一个列表,按最重要到最不重要的顺序排列所有这些来源。
更重要的源优先于不太重要的源,并且可以更改不太重要源设置的值。
<DataGridTextColumn Foreground="Black" />
在上面的代码中,Foreground
属性是内联设置的,因此它具有本地值的优先级,该优先级高于样式触发器。因此,Trigger Setter
无法更改内联设置的"更重要"值。
解决方案很简单。。。使用优先级较低的源设置初始值,例如样式设置器。但是,现在您遇到的问题是,DataGridTextColumn
不是常规的FrameworkElement
,因此没有Style
属性。幸运的是,您应该能够使用CellStyle
属性:
<DataGridTextColumn ... >
<DataGridTextColumn.CellStyle>
<Style>
<Setter Property="Foreground" Value="Black"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>