【问题标题】:DataTrigger on Enums as the trigger value on a WPF Style枚举上的 DataTrigger 作为 WPF 样式上的触发值
【发布时间】:2010-12-02 02:13:18
【问题描述】:

简而言之,这就是我想要做的事情,我只是从代码开始,它很可能是有意义的。

<bl:InnerGlowBorder x:Name="glow"
                    InnerGlowColor="Teal">
  <bl:InnerGlowBorder.Style>
    <Style TargetType="bl:InnerGlowBorder">
      <Style.Triggers>
        <DataTrigger Binding="{Binding ViewUnitStatus}"
                     Value="UnitStatusModel.Pass">
          <Setter Property="InnerGlowColor"
                  Value="Green" />
        </DataTrigger>
        <DataTrigger Binding="{Binding ViewUnitStatus}"
                     Value="UnitStatusModel.Fail">
          <Setter Property="InnerGlowColor"
                  Value="Red" />
        </DataTrigger>
        <DataTrigger Binding="{Binding ViewUnitStatus}"
                     Value="UnitStatusModel.Indeterminate">
          <Setter Property="InnerGlowColor"
                  Value="Yellow" />
        </DataTrigger>
        <DataTrigger Binding="{Binding ViewUnitStatus}"
                     Value="UnitStatusModel.Warning">
          <Setter Property="InnerGlowColor"
                  Value="Orange" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </bl:InnerGlowBorder.Style>
</bl:InnerGlowBorder>

以及枚举定义:

namespace SEL.MfgTestDev.ESS.ViewModel
{
    public enum UnitStatusModel
    {
        Indeterminate,
        Pass,
        Fail,
        Warning,
    }
}

我是否缺少一件作品来完成这项工作?我发现了一些关于依赖于对象数据源的枚举的 WPF 文章,我不太喜欢那种解决方案,难道我不能在这里做一些更简单的事情吗?

【问题讨论】:

  • InnerGlowColor="Teal" 问题在于,如果样式设置的字段在基础中被覆盖,则触发器不会改变任何内容。
  • +1 我正要回应那个效果。发布您自己的答案,然后接受它。 :)

标签: c# .net wpf binding enums


【解决方案1】:

我找到了解决方案,这很愚蠢。

样式被设计为控件的一种视觉模板,但它们被设计为视觉实现的基础,而不是作为全部/最终的视觉模型。

因此,我的模板决定了 InnerGlowColor 应该是什么。但是,通过将属性 InnerGlowColor="Teal" 应用于元素,我创建了一个有效的覆盖,忽略了我的视觉风格。解决方案是简单地删除元素声明中的依赖属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2017-08-31
    • 2016-07-31
    • 2020-03-20
    相关资源
    最近更新 更多