Кнопка с использованием ICommand не отключается?
-
13-10-2019 - |
Вопрос
У меня есть кнопка управления в моем приложении 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) в сочетании с триггером, аналогичным тому, который опубликовал Хасан Хан, чтобы показать отключенные изображения кнопок в оттенках серого.