69 votes

'Grisonnante Out" WPF bouton image?

J'ai un simple Button de contrôle qui contient un Image objet que par son contenu. Je veux donc définir l' Image d'opacité à 0,5 lorsque l' Button est désactivé pour fournir un autre repère visuel à l' Button statut.

Quelle est la façon la plus simple à réaliser que le résultat en XAML? Merci pour votre aide.

183voto

itowlson Points 44174

Utiliser un déclencheur dans le style d'Image. (Il serait plus naturel de le mettre dans le style de Bouton, mais le style de Bouton ne peut pas nuire à l'Image de ennuyeux des raisons techniques. Il pourrait être fait dans le Bouton ControlTemplate mais c'est overkill pour ce que vous voulez ici.)

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

Remarque nous profitons ici du fait que l'Image sera désactivée lorsque le Bouton est désactivé, de sorte que nous pouvons déclencher directement sur l'Image propre de la propriété IsEnabled. Dans d'autres cas, le Bouton de la propriété nous voulons déclencher sur peut pas être héritée par l'Image; dans ce cas, nous aurions besoin d'utiliser un DataTrigger avec le FindAncestor RelativeSource de se lier à l'contenant le bouton.

42voto

CGsoldier Points 131

Si vous voulez quelque chose de plus générique, mettez ceci dans votre section des ressources pour votre fenêtre ou votre UserControl .

<UserControl.Resources>     
    <Style x:Key="ImageEnabled" TargetType="Image">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value="0.25"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

Et dans le bouton viens de le faire

<Button>
    <Image Source="{StaticResource LinkImage}" Style="{StaticResource ImageEnabled}"/>
</Button>

22voto

Tower Points 20180

Voici un plus générique de style que vous pouvez appliquer:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X