如何使用DataTrigger覆盖绑定属性

时间:2009-05-07 06:29:39

标签: .net wpf xaml binding datatrigger

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

该代码段没有反映出来,但实际代码对于Severity有很多可能的状态级别,因此我不想为每种可能的严重性定义触发器。我想要的逻辑是“使用信息颜色,除非严重性是错误,然后使用红色”。

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

1 个答案:

答案 0 :(得分:10)

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

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