覆盖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>

覆盖DataGrid前景

在WPF中,有一种叫做依赖属性值优先级的东西。请点击链接了解完整的详细信息,但简而言之,DependencyPropertys可以从许多不同的来源更新:Animations、样式、代码隐藏等。(链接页面中)有一个列表,按最重要到最不重要的顺序排列所有这些来源。

更重要的源优先于不太重要的源,并且可以更改不太重要源设置的值。

<DataGridTextColumn Foreground="Black" />

在上面的代码中,Foreground属性是内联设置的,因此它具有本地值的优先级,该优先级高于样式触发器。因此,Trigger Setter无法更改内联设置的"更重要"值。

解决方案很简单。。。使用优先级较低的源设置初始值,例如样式设置器。但是,现在您遇到的问题是,DataGridTextColumn不是常规的FrameworkElement,因此没有Style属性。幸运的是,您应该能够使用CellStyle属性:

<DataGridTextColumn ... >
    <DataGridTextColumn.CellStyle>
        <Style>
            <Setter Property="Foreground" Value="Black"/>
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>