WPF:DataTrigger没有在DataTemplate中触发

时间:2017-07-21 11:57:39

标签: wpf triggers datatemplate

如果网格单元格的背景颜色为红色,我的要求是将前景色更改为白色。

我在下面的模板中使用了单元格。但是,它没有触发。

<DataTemplate x:Key="NumericThreeDecimalCellTemplate">
    <TextBlock HorizontalAlignment="Right"
               VerticalAlignment="Center">
        <TextBlock.Text>
            <Binding Path="Value"
                 StringFormat="###,###,###,###,###,###,##0.000;(###,###,###,###,###,###,##0.000)" />
        </TextBlock.Text>
        <TextBlock.Foreground>
            <Binding Path="Value"
                   Converter="{StaticResource negativeToBrushConvertor}" />
        </TextBlock.Foreground>


    </TextBlock>

    <DataTemplate.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>                    
                <DataTrigger Binding="{Binding Path=Background.Color,RelativeSource={RelativeSource Mode=Self}}" Value="#FF0000">
                    <Setter Property="Foreground" Value="White" />
                </DataTrigger>                    
            </Style.Triggers>
        </Style>
    </DataTemplate.Resources>
</DataTemplate>`

如果我做错了,请告诉我。

1 个答案:

答案 0 :(得分:0)

本地值(例如您的negativeToBrushConverter返回的值)优先于样式设置器设置的值:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/dependency-property-value-precedence

因此,无论您将Foreground属性设置为Style,都不会被应用,除非您删除此部分:

<TextBlock.Foreground>
    <Binding Path="Value" Converter="{StaticResource negativeToBrushConvertor}" />
</TextBlock.Foreground>

您应该在Foreground中为Style属性设置默认值。您应该将AncestorType的{​​{1}}设置为您的单元格的属性:

{RelativeSource}