如何设置"默认"通过DataTrigger控制WPF的样式

时间:2017-10-24 03:18:15

标签: c# wpf

我有一个TextBock,我根据通过绑定布尔属性触发的DataTrigger更改样式。 我想要的是如果bound属性的值为true,则更改文本的ForeGround颜色。 如果它是假的我想使用我的"默认"样式(BodyValueStyle1)再次。 到目前为止我是如何做到的:

<TextBlock.Style>
    <Style BasedOn="{StaticResource BodyValueStyle1}" TargetType="{x:Type TextBlock}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsTrueOrFalse}" Value="True">
                <Setter Property="TextBlock.Foreground" Value="Red"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding IsTrueOrFalse}" Value="False">
                <Setter Property="TextBlock.Foreground" Value="Black"/>
            </DataTrigger>
         </Style.Triggers>
     </Style>
</TextBlock.Style>

它工作正常,做我想要的,但我不喜欢的是以下内容:

<DataTrigger Binding="{Binding IsTrueOrFalse}" Value="False">
    <Setter Property="TextBlock.Foreground" Value="Black"/>
</DataTrigger>

有没有办法重置&#34;我的默认样式(BodyValueStyle1)的样式,而不是设置我在错误条件之前更改的所有属性? 因为我的默认ForeGround颜色无论如何都是黑色的。

1 个答案:

答案 0 :(得分:3)

如果Setter中有BodyValueStyle1

<Setter Property="Foreground" Value="Black" />

然后您可以删除第二个DataTrigger。触发器的行为已经是你想要的了。

<强>来源

Another Stack Overflow question with explanation

  

当不再满足触发条件时,触发器更改的属性会自动重置为其先前的值。触发器针对预期会发生变化并返回到原始状态的瞬态状态进行了优化,例如Button上的IsPressed和ListBoxItem上的IsSelected。感兴趣的财产必须是依赖财产。