03janv. 2012

WPF : Griser l'image contenue dans un bouton

Problème bateau lorsque l'on crée un bouton contenant une image - ou tout autre contrôle. Le ControlTemplate d'un bouton ne modifie pas son contenu (propriété Content) pour refléter l'état activé/désactivé (propriété IsEnabled).

Il est très simple de résoudre cette problématique en utilisant les Trigger et les Style de la façon suivante :

<Style x:Key="Style_ButtoImage" TargetType="{x:Type Image}">
         <Setter Property="SnapsToDevicePixels" Value="True"/>
         <Setter Property="Height" Value="22"/>
         <Setter Property="Width" Value="22"/>
         <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value="0.4"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="True">
                <Setter Property="Opacity" Value="1"/>
            </Trigger>
    </Style.Triggers>
</Style>

J'ai choisi de ne toucher qu'à l'image dans cet exemple. A savoir que l'état IsEnabled est répercuté sur le contenu du bouton. Pas besoin de modifier le ControlTemplate du bouton.

Cet exemple est un cas d'école. On peut utiliser n'importe quel trigger pour modifier le rendu de l'image.

aucun commentaire

Fil des commentaires de ce billet

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.