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>
Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top