Кнопка с использованием ICommand не отключается? - PullRequest
2 голосов
/ 26 декабря 2010

У меня есть кнопка управления в моем приложении wpf-mvvm.

Я использую свойство ICommand (определено в viewmodel), чтобы привязать событие нажатия кнопки к viewmodel.

У меня есть -> выполнить и canexecute параметры для моей ICommand реализации (RelayCommand).

Даже если CanExecute равно false ... кнопка не отключена ... КОГДА кнопка CONTENT является ИЗОБРАЖЕНИЕМ

Но, когда содержимое кнопки является текстовым ... включить / отключить работает нормально.

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

Ответы [ 3 ]

14 голосов
/ 26 декабря 2010

Кнопка отключается, просто она не влияет на рендеринг изображения. Вам нужно будет написать триггер в стиле, который изменяет непрозрачность изображения до .5, и вы получите желаемый эффект отключения кнопки, например:

<Style x:Key="imageButton" TargetType="Button">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value=".5" />
            </Trigger>
        </Style.Triggers>
</Style>
1 голос
/ 20 июня 2012

Спасибо!Попробовал предложенный код после всех моих кнопок.Не сработалоПопытался извлечь только триггер и вставить его в общую кнопку, от которой унаследовали все остальные кнопки: работал как шарм!Сначала этот код:

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

На основе приведенного выше кода я создал такие кнопки:

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

Когда кнопки, когда они отключены, изображения в них автоматически уменьшаются до 0,5 непрозрачности.

0 голосов
/ 26 декабря 2010

Вам понадобится эффект пиксельного шейдера (он не так сложен, как кажется, это просто добавление ссылки на сборку и вы можете использовать ее так же легко, как любой встроенный эффект WPF) в сочетании с триггером, похожим на тот, который выложил Хасан Хан, для отображения изображений отключенных кнопок в оттенках серого.

...