【问题标题】:How to set "default" style of WPF control via DataTrigger如何通过 DataTrigger 设置 WPF 控件的“默认”样式
【发布时间】:2018-04-04 17:27:23
【问题描述】:

我有一个 TextBock,我在其中更改基于通过绑定布尔属性触发的 DataTrigger 的样式。 如果绑定属性的值为 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>

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

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    如果您在BodyValueStyle1 中有Setter

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

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

    来源

    Another Stack Overflow question with explanation

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

    【讨论】:

      猜你喜欢
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 2012-05-09
      • 2016-03-22
      相关资源
      最近更新 更多