使用ICommand的按钮不会被禁用?

时间:2010-12-26 06:10:30

标签: wpf mvvm icommand canexecute

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

3 个答案:

答案 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发布的一个以灰度显示禁用的按钮图像。