如何使用DataTrigger覆盖绑定属性

10

我有以下XAML用于显示所选列表视图项的详细信息。我希望矩形在文本后面显示标准的信息颜色,除非所选项代表错误信息。下面的代码不起作用,并且始终显示信息颜色。如果我不为根<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>

这段代码片段并不能完整反映,实际代码中有很多可能的严重程度级别,我不想为每个可能的严重程度定义一个触发器。我的逻辑是:“除非严重性为错误,否则使用信息颜色,然后使用红色。”

我相信我误解了WPF的一些基本方面,但似乎无法确定。有人能指点我正确的方向吗,以便在其条件为真时覆盖现有填充值的数据触发器?

1个回答

12

你已经接近成功了。不要在矩形的属性上指定“默认”填充,而是在样式中指定:

<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>

没错,它起作用了。但是...你能解释一下为什么吗?在我的看法中,矩形的填充属性应该是等效的。 - Paul Alexander
不行,这只是经验问题。我猜将其设置在对象本身上会覆盖样式内的任何内容。 - Matt Hamilton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接