wpf触发器对代码中设置的样式无效

时间:2017-08-20 12:20:26

标签: wpf xaml eventtrigger

在Resources.Xaml中,我从Datagrid Cell

设置了一个样式
<Style TargetType="DataGridCell" >
    <Style.Triggers>
        <Trigger  Property="DataGridCell.IsSelected"  Value="True">
            <Setter Property="Background" Value="CornflowerBlue" />
            <Setter Property="Foreground" Value="White" />
        </Trigger>
    </Style.Triggers>
</Style>

在特定的DataGrid列中我手动设置Foreground

 Sub New()
        FontWeight = FontWeights.Bold
        Foreground = Brushes.Blue
 End Sub

当选择单元格时,触发器会改变背景剂量,但前景不会

我相信这是因为我在代码中设置了forground

我该怎么做才能解决这个问题?

注意:我无法为xaml

中的列设置foregroud

1 个答案:

答案 0 :(得分:1)

编写Foreground = Brushes.Blue为Foreground依赖项属性设置本地值。本地值的优先级高于Trigger的setter值。我建议为DataGridCell创建一个命名样式,从基于样式派生,并在代码中应用派生样式:

<Style TargetType="DataGridCell" >
    <Style.Triggers>
        <Trigger  Property="DataGridCell.IsSelected"  Value="True">
            <Setter Property="Background" Value="CornflowerBlue" />
            <Setter Property="Foreground" Value="White" />
        </Trigger>
    </Style.Triggers>
</Style>

<Style x:Key="BlueCell" TargetType="DataGridCell" BasedOn="{x:Type DataGridCell}">
    <Setter Property="Foreground" Value="Blue" />
    <Setter Property="FontWeight" Value="Bold" />
</Style>
Sub
   CellStyle = (Style)datagrid.FindResource("BlueCell");
End Sub

我正在使用c#语法,因为我缺乏vb.net知识。代码调用DataGrid的FindResource方法来检索“BlueCell”样式,并在转换为Style类型后将其分配给列的CellStyle