2009-04-27 6 views

Répondre

8

Vous n'avez pas besoin de ControlTemplate pour cela. Vous pouvez accomplir ceci avec seulement des styles. Le style de bouton suivant est appliqué à tous les boutons. Il définit Opacity sur 0.5 lorsque IsEnabled est vrai et le renvoie automatiquement à 1 lorsque la condition de déclenchement ne s'applique plus. Si vous appliquez ControlTemplate dans un style, vous pouvez ajouter ce déclencheur à celui-là. Cela fonctionne aussi quand le parent est désactivé puisque IsEnabled est hérité.

<Window.Resources> 
    <Style TargetType="{x:Type Button}"> 
     <Style.Triggers> 
      <Trigger Property="Control.IsEnabled" Value="false"> 
       <Setter Property="Control.Opacity" Value="0.5" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

Ou avez-vous spécifiquement besoin d'une solution ControlTemplate?

Mise à jour

Je ne pense pas que TemplateBinding Converter supporte donc si vous voulez faire en ControlTemplate vous devez utiliser quelque chose comme assez élevé déclaration suivante dans l'Reliure arborescence logique.

Opacity={Binding Path=IsEnabled, 
     RelativeSource={RelativeSource TemplatedParent}, 
     Converter={StaticResource BoolToDoubleConverter}} 

Lorsque BoolToDoubleConverter est un IValueConverter qui retourne 1 pour vrai et 0,5 pour faux. Je recommande toujours l'approche de style si vous pouvez utiliser des styles. Beaucoup plus simple je crois.

+0

Merci, fonctionne bien comme un déclencheur de style. – zproxy

Questions connexes