4

当我禁用按钮并在启用时清晰显示时,以下内容会使图像变暗:

<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 Path}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type UIElement}, AncestorLevel=1}, Path=IsEnabled}" Value="False">
            <Setter Property="Fill" Value="Gray"></Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>
...
<Button Name="btnPageFirst" IsEnabled="False">
    <Path Data="F1M820.557,535.025L838.189,535.024 817.857,555.36 857.82,555.36 857.82,568.301 817.998,568.301 838.226,588.531 820.557,588.499 793.82,561.765 820.557,535.025z" Stretch="Uniform" Fill="DodgerBlue" Width="16" Height="16" Margin="0,0,0,0" />
</Button>

4

1 回答 1

8

有一个优先顺序用于在运行时计算依赖属性的值。

过于简单的优先级列表:

  1. 本地值(您在控件上设置的值)
  2. 触发器
  3. 样式设置器

您的问题是您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>
    

附带说明:如果您总是在按钮中“内部”,则可以将其重写RelativeSource为:

RelativeSource={RelativeSource AncestorType={x:Type Button}}
于 2012-05-10T05:40:57.017 回答