10
votes

Différentes images pour activer et désactiver les états d'un bouton dans WPF

Je veux changer l'image du bouton dans le code ci-dessous en fonction de son état, c'est-à-dire d'utiliser une image différente pour activer et désactiver l'état. XXX

Merci.


0 commentaires

4 Réponses :


0
votes

Essayez d'utiliser style.triggers Voir la poste Ttrigger de style WPF


0 commentaires

0
votes

Fondamentalement, créez un style pour le bouton qui permet d'afficher un objet d'image dans sa propriété de contenu, puis a une gâchette qui vérifie l'état activé des boutons et quand il est vrai que ce soit une image, et à tout autre. Les temps sont l'autre image.


0 commentaires

10
votes

Vous pouvez utiliser un style avec des déclencheurs comme celui-ci:

<Style TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <StackPanel Orientation="Horizontal" >
                    <Image Name="PART_Image" Source="path to normal image" />
                </StackPanel>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Source" Value="path to mouse over image" TargetName="PART_Image"/>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="Source" Value="path to pressed image" TargetName="PART_Image"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Source" Value="path to disabled image" TargetName="PART_Image"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


3 commentaires

N'y a-t-il aucun moyen d'utiliser une sorte de filtre de grisage (et d'autres) pour générer les images à la volée? Devons-nous avoir des images essentiellement codées des différents états?


Oui, vous pouvez utiliser la même logique que celle décrite ci-dessus et modifier la propriété d'opacité de l'image. Vous pouvez également faire des choses comme l'ajout d'une bordure au modèle et le montrer / cacher lorsque la souris est sur l'image ou change la couleur de fond ...


@Malross - Découvrez cet article de codeProject, qui montre comment utiliser un convertisseur de valeur pour créer une image désactivée à la volée. Je suis avec vous, qu'il est frustrant de devoir écrire du code pour faire des choses qui gagnent gratuitement, mais au moins vous n'avez pas à préfontrer les images. codeProject.com/kb/wpf/grayScaleButton.aspx



9
votes

J'ai utilisé le code suivant pour créer des images à l'intérieur des boutons pour avoir la moitié de l'opacité lorsque le bouton est désactivé et cela fonctionne bien!

<Style TargetType="Button">
    <Style.Resources>
        <Style TargetType="Image">
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Opacity" Value="0.5" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Style.Resources>
</Style>


0 commentaires