Вопрос

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

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

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

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

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

<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>
Это было полезно?

Решение

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

<Style x:Key="imageButton" TargetType="Button">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value=".5" />
            </Trigger>
        </Style.Triggers>
</Style>

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top