.net - 如何使用 DataTrigger 覆盖绑定(bind)属性

标签 .net wpf xaml binding datatrigger

我有以下 XAML 用于显示有关在 ListView 中选择的项目的详细信息。我希望矩形在文本后面显示标准信息颜色,除非所选项目表示错误消息。下面的代码不能按原样工作,总是显示信息颜色。如果我不指定 Fill 效果很好为根 <Rectangle />元素。

<Rectangle Fill="{DynamicResource {x:Static SystemColors.InfoBrushKey}}" 
           RadiusX="4" RadiusY="4">
  <Rectangle.Style>
    <Style TargetType="{x:Type Rectangle}">
      <Style.Triggers>
        <DataTrigger Binding="{Binding Path=CurrentMessage.Severity"  
                     Value="Error" >
          <Setter Property="Fill" Value="#20FF0000" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Rectangle.Style>
</Rectangle>

该片段没有反射(reflect)它,但实际代码具有相当多的严重性状态级别,因此我不想为每个可能的严重性定义触发器。我想要的逻辑是“使用信息颜色,除非严重性是错误,然后使用红色”。

我确定我误解了 WPF 的一些基本方面,但似乎无法确定它。有人可以指出我正确的方向,以便我指定的数据触发器将在条件为真时覆盖现有的 Fill 值吗?

最佳答案

您快到了。不要将“默认”填充指定为矩形的属性,而是在样式中指定它:

<Rectangle RadiusX="4" RadiusY="4">
  <Rectangle.Style>
    <Style TargetType="{x:Type Rectangle}">
      <Setter Property="Fill" 
              Value="{DynamicResource {x:Static SystemColors.InfoBrushKey}}" />
      <Style.Triggers>
        <DataTrigger Binding="{Binding Path=CurrentMessage.Severity"  
                     Value="Error" >
          <Setter Property="Fill" Value="#20FF0000" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Rectangle.Style>
</Rectangle>

关于.net - 如何使用 DataTrigger 覆盖绑定(bind)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/833158/

相关文章:

c# - HtmlGenericControl 和 id

.net - 小数值显示为 0.00

c# - WPF 样式/模板仅应用于最后添加的元素

多个控件刷新时 WPF 闪烁问题

c# - Xamarin Forms BindableProperty 在构造函数之前更改

c# - WPF 如何使列表框项目可编辑?

WPF 中的 C# 和 XAML – 它们如何协同工作?

c# - GetHashCode 是线程安全的吗?

.net - ClickOnce 设计我们的可执行文件并显示 "Unknown Publisher"

c# - 我怎样才能得到用户控件wpf的父级