覆盖DataGrid Foreground

时间:2014-08-26 14:23:51

标签: c# wpf datagrid

我想在WPF DataGrid中覆盖所选DataGrid Line的前景色。

Foreach列前景在定义中设置。

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

1 个答案:

答案 0 :(得分:1)

在WPF中,有一种称为Dependency Property Value Precedence的东西。请按照链接获取完整的详细信息,但简而言之,DependencyProperty可以从许多不同的来源更新:Animation s,样式,代码隐藏等。有一个列表(在链接页面)命令所有这些来源从最重要到最不重要。

更重要的来源优先于不太重要的来源,可以改变不太​​重要的来源设定的价值。

<DataGridTextColumn Foreground="Black" />

在上面的代码中,Foreground属性是内联设置的,因此它的优先级为 Local值,高于 Style触发器 EM>。因此,Trigger Setter无法改变“{1}}更重要的内容。您设置为内联的值。

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

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