WPF DataTrigger适用于图像,但不适用于路径

时间:2012-05-10 05:17:45

标签: wpf xaml datatrigger

以下在禁用按钮时使图像变暗并在启用时清晰显示:

<Style TargetType="{x:Type Image}">
    <Style.Triggers>
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type UIElement}, AncestorLevel=1}, Path=IsEnabled}" Value="False">
      <Setter Property="Opacity" Value="0.25"></Setter>
    </DataTrigger>
    </Style.Triggers>
</Style>
...
<Button Name="btnPageFirst" IsEnabled="False">
    <Image Source="..\Resources\imgMoveFirst.png" />
</Button>

<Style TargetType="{x:Type Image}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type UIElement}, AncestorLevel=1}, Path=IsEnabled}" Value="False"> <Setter Property="Opacity" Value="0.25"></Setter> </DataTrigger> </Style.Triggers> </Style> ... <Button Name="btnPageFirst" IsEnabled="False"> <Image Source="..\Resources\imgMoveFirst.png" /> </Button>

我想用Path做类似的效果。我想灰色图像。但它没有灰色,也没有错误。



1 个答案:

答案 0 :(得分:7)

precedence order用于在运行时计算依赖项属性的值。

过度简化的优先级列表:

  1. 本地值(您在控件上设置的内容)
  2. 触发器
  3. 样式制定者
  4. 您的问题是您在路径上设置Fill="DodgerBlue"并且因为它具有更高的优先级,因此触发器是您看不到填充更改的方式。这就是为什么它适用于你的Image,因为你没有直接设置不透明度。

    使其有效:

    1. 从路径中删除Fill="DodgerBlue"
    2. 以您的风格设置:

      <Style TargetType="{x:Type Path}">
          <Style.Setters>
              <Setter Property="Fill" Value="DodgerBlue"/>
          </Style.Setters>
          <Style.Triggers>
             <!-- ... -->
          </Style.Triggers>
      </Style>
      
    3. 作为旁注:如果您总是在“按钮内”,则可以将RelativeSource重写为:

      RelativeSource={RelativeSource AncestorType={x:Type Button}}