ICommand - canexecute не может отключить кнопку с содержимым изображения
У меня есть кнопка управления в моем приложении wpf-mvvm.
Я использую свойство ICommand (определенное в viewmodel), чтобы привязать событие нажатия кнопки к viewmodel.
Я имею -> выполнить и могу выполнить параметры для моей реализации 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 ответа
Кнопка действительно отключается, просто она не влияет на рендеринг изображения. Вам нужно будет написать триггер в стиле, который изменяет непрозрачность изображения до.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) в сочетании с триггером, аналогичным тому, который опубликовал Хасан Хан. показывать изображения отключенных кнопок в оттенках серого.