2

我的 wpf-mvvm 应用程序中有一个按钮控件。

我使用一个ICommand属性(在 viewmodel 中定义)将按钮单击事件绑定到 viewmodel。

我的实现有 -> 执行和canexecute参数ICommandRelayCommand)。

即使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>
4

3 回答 3

15

按钮确实被禁用,只是它不影响图像的渲染。您必须编写一个触发器,将图像的不透明度更改为 0.5,您将获得所需的按钮禁用效果,如下所示:

<Style x:Key="imageButton" TargetType="Button">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value=".5" />
            </Trigger>
        </Style.Triggers>
</Style>
于 2010-12-26T07:24:11.613 回答
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 不透明度。

于 2012-06-20T19:13:47.493 回答
0

您将需要像素着色器效果(它并不像听起来那么复杂,它只是添加一个程序集引用,然后您可以像使用任何内置 WPF 效果一样轻松地使用它)以及类似于 Hasan Khan 发布的触发器以灰度显示禁用的按钮图像。

于 2010-12-26T08:50:30.847 回答