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 に答える