我的wpf-mvvm应用程序中有一个按钮控件。
我使用ICommand
属性(在viewmodel中定义)将按钮单击事件绑定到viewmodel。
我有 - >为canexecute
实施(ICommand
)执行RelayCommand
参数。
即使CanExecute
为假...按钮未被禁用...按钮内容为图像
但是,当按钮内容为text..enable / disable工作正常时。
<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>
答案 0 :(得分:14)
按钮确实被禁用,只是它不会影响图像的渲染。 您必须在样式中编写一个触发器,将图像的不透明度更改为.5,您将获得所需的按钮效果,如下所示:
<Style x:Key="imageButton" TargetType="Button">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value=".5" />
</Trigger>
</Style.Triggers>
</Style>
答案 1 :(得分:1)
谢谢!在我的所有按钮之后尝试了建议的代码。没工作。试图只提取触发器并将其插入一个通用按钮,所有其他按钮继承自:工作就像一个魅力!这段代码首先:
<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不透明度时。
答案 2 :(得分:0)
你需要pixel shader effect(它不像听起来那么复杂,它只是添加一个汇编引用然后你可以像任何内置的WPF效果一样使用它)与触发类似于Hasan Khan发布的一个以灰度显示禁用的按钮图像。