2010-11-21 4 views
1

Je crée un bouton avec un simple polyligne que je veux changer de couleur lorsque le bouton est désactivé (btnUp.IsEnabled = false).Problème de déclenchement et de liaison WPF

J'ai essayé ceci:

<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> 

Mais le Polyligne a toujours la même couleur (vert) lorsque le bouton est désactivé. Même si je m'attendais à ce qu'il soit blanc en raison de la liaison de données entre le button.foreground et polyline.stroke.

Cependant, si je change le déclencheur pour cela, il fonctionne (le bouton est réduit):

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

Répondre

1

J'ai trouvé la réponse moi-même. J'ai déplacé le Foreground="Green" à un setter séparé, <Setter Property="Foreground" Value="#FF383838"/> à l'intérieur du <Style>, alors cela a fonctionné. Je ne sais pas pourquoi.

est ici la solution complète:

<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

valeurs de propriété explicites sont-priorité plus élevée que les valeurs de déclenchement, qui sont de priorité plus élevée que les valeurs de style - de sorte que votre solution est tout à fait correct. Pour plus d'informations, consultez la section «Liste des priorités de configuration des propriétés de dépendance» de: http://msdn.microsoft.com/fr-fr/library/ms743230.aspx –