2010-11-21 12 views
1

ボタンが無効(btnUp.IsEnabled = false)のときに色を変更したい、単純なポリラインでボタンを作成しています。 WPFトリガーとバインドの問題

は、私はこれを試してみました:

<RepeatButton x:Name="btnUp" Foreground="Green"> 
    <RepeatButton.Style> 
    <Style TargetType="{x:Type RepeatButton}"> 
     <Setter Property="Content"> 
     <Setter.Value> 
      <Polyline x:Name="arrowUp" Points="0,2 3,0 6,2" Stroke="{Binding RelativeSource={RelativeSource AncestorType=RepeatButton}, Path=Foreground, Mode=TwoWay}" StrokeThickness="2"/> 
     </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Foreground" Value="#FFFFFFFF"/> 
     </Trigger> 
     </Style.Triggers> 
    </Style> 
    </RepeatButton.Style> 
</RepeatButton> 

しかし、ボタンが無効になっているときポリラインはまだ同じ(緑)色をしています。 button.foregroundとpolyline.strokeの間のデータバインディングのために、私はそれが白であると予想していましたが。私はこのそれは動作します(ボタンが折りたたまれている)にトリガを変更した場合

は、しかし:

<Trigger Property="IsEnabled" Value="False"> 
    <Setter Property="Visibility" Value="Collapsed"/> 
</Trigger> 

答えて

1

私は自分自身で答えを見つけました。 Foreground="Green"<Style>の中の別のセッター<Setter Property="Foreground" Value="#FF383838"/>に移動しました。 私はなぜそう思うか分かりません。ここで

は完全なソリューションです:

<RepeatButton x:Name="btnUp"> 
    <RepeatButton.Style> 
    <Style TargetType="{x:Type RepeatButton}"> 
     <Setter Property="Foreground" Value="Green"/> 
     <Setter Property="Content"> 
     <Setter.Value> 
      <Polyline x:Name="arrowUp" Points="0,2 3,0 6,2" Stroke="{Binding RelativeSource={RelativeSource AncestorType=RepeatButton}, Path=Foreground, Mode=TwoWay}" StrokeThickness="2"/> 
     </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Foreground" Value="#FFFFFFFF"/> 
     </Trigger> 
     </Style.Triggers> 
    </Style> 
    </RepeatButton.Style> 
</RepeatButton> 
+0

明示的なプロパティ値は、スタイル値よりも優先度の高いトリガー値、より優先度の高い - ので、あなたの修正は正確に正しいです。詳細については、以下の「依存関係プロパティの優先順位リスト」セクションを参照してください。http://msdn.microsoft.com/en-us/library/ms743230.aspx –

関連する問題