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

Byd*_*dia 4 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>
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

.在我看来,我只传递了两个论点.那么第三个论点来自哪里?

车型/ MyModel.py

<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>
Run Code Online (Sandbox Code Playgroud)

控制器/ WebHandler.py

<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>
Run Code Online (Sandbox Code Playgroud)

这可能是一件简单的事情,但今天编码18小时后,我的大脑变成了燕麦片.

nem*_*esv 7

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

过度简化的优先级列表:

  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>
    
    Run Code Online (Sandbox Code Playgroud)

作为旁注:如果您总是在"按钮内",则可以将其重写RelativeSource为:

RelativeSource={RelativeSource AncestorType={x:Type Button}}
Run Code Online (Sandbox Code Playgroud)