Bouton en utilisant ICommand ne soit pas désactivé?
-
13-10-2019 - |
Question
J'ai un bouton de contrôle dans mon application WPF MVVM-.
J'utilise une propriété ICommand
(définie dans viewmodel) pour lier l'événement click de bouton pour viewmodel.
Je -.> Exécuter et les paramètres de canexecute
pour ma mise en œuvre de ICommand
(de RelayCommand
)
Même si CanExecute
est faux ... bouton est désactivé ... lorsque le bouton est CONTENU IMAGE
Mais, lorsque le contenu du bouton est fonctionne text..enable / désactiver fin.
<Button DockPanel.Dock="Top"
Command="{Binding Path=MoveUpCommand}">
<Button.Content>
<Image Source="/Resources/MoveUpArrow.png"></Image>
</Button.Content>
<Style>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value=".5" />
</Trigger>
</Style.Triggers>
</Style>
</Button>
La solution
Bouton ne soit désactivé, juste que cela ne touche pas le rendu de l'image. Vous devrez écrire un déclencheur dans le style qui change l'opacité de l'image à 0,5 et vous obtiendrez l'effet désiré du bouton désactivé comme ceci:
<Style x:Key="imageButton" TargetType="Button">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value=".5" />
</Trigger>
</Style.Triggers>
</Style>
Autres conseils
Merci! Essayé le code suggéré après tous mes boutons. Ça n'a pas marché. J'ai essayé d'extraire tout le déclencheur et l'insérer dans un bouton générique que tous les autres boutons hérités de: travaillé comme un charme! Ce code premier:
<Style x:Key="SecButton" TargetType="Button">
<Setter Property="FontSize" Value="16" />
<Setter Property="Margin" Value="0,0,5,5" />
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value=".5" />
</Trigger>
</Style.Triggers>
</Style>
Basé sur le code ci-dessus, j'ai créé des boutons comme ceci:
<Style x:Key="NewBtnStyle" TargetType="Button" BasedOn="{StaticResource SecButton}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="Images/new.png" Width="50" Height="50" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
Lorsque les boutons où les images désactivées en eux est automatiquement grisés à 0,5 opacité.
Vous aurez besoin effet pixel shaders (il est pas aussi compliqué que cela puisse paraître, il est juste sur l'ajout d'une référence assemblage d'un alors vous pouvez l'utiliser aussi facilement que tout effet WPF intégrée) conjointement avec déclenchement similaire à celui Hasan Khan a affiché pour montrer les personnes handicapées images en niveaux de gris. bouton