【问题标题】:different images for enable and disable states of a button in WPF用于启用和禁用 WPF 中按钮状态的不同图像
【发布时间】:2010-12-04 15:57:25
【问题描述】:

我想根据其状态更改下面代码中按钮的图像,即使用不同的图像来启用和禁用状态。

<Button CommandParameter="Open" >
    <StackPanel Orientation="Horizontal" >
        <Image Source="../icons/big/open.png" Width="20" Height="20"></Image>
    </StackPanel>
</Button>

谢谢。

【问题讨论】:

    标签: c# wpf image button


    【解决方案1】:

    您可以使用带有触发器的样式,如下所示:

    <Style TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <StackPanel Orientation="Horizontal" >
                        <Image Name="PART_Image" Source="path to normal image" />
                    </StackPanel>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Source" Value="path to mouse over image" TargetName="PART_Image"/>
                        </Trigger>
                        <Trigger Property="IsPressed" Value="True">
                            <Setter Property="Source" Value="path to pressed image" TargetName="PART_Image"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Source" Value="path to disabled image" TargetName="PART_Image"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    

    【讨论】:

    • 有没有办法使用某种灰色过滤器(和其他)来动态生成图像?我们是否必须拥有不同状态的硬编码图像?
    • 是的,您可以使用与上述相同的逻辑并更改图像的 Opacity 属性。您还可以在模板中添加边框并在鼠标悬停在图像上时显示/隐藏它,或者更改背景颜色...
    • @MalRoss - 查看这篇 codeproject 文章,它展示了如何使用值转换器即时创建禁用的图像。我和你一样,不得不编写代码来做 WinForms 免费做的事情是令人沮丧的,但至少你不必预先生成图像。 codeproject.com/KB/WPF/GrayscaleButton.aspx
    【解决方案2】:

    我使用以下代码使按钮内的图像在按钮被禁用时具有一半的不透明度并且效果很好!

    <Style TargetType="Button">
        <Style.Resources>
            <Style TargetType="Image">
                <Style.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Opacity" Value="0.5" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Style.Resources>
    </Style>
    

    【讨论】:

      【解决方案3】:

      尝试使用 Style.Triggers 见帖子wpf-style-trigger

      【讨论】:

        【解决方案4】:

        基本上,为按钮创建一个样式,使其在其内容属性中显示一个图像对象,然后有一个触发器来检查按钮的启用状态,当它为真时,它是一个图像,而在所有其他的时间是另一个图像。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-04-19
          • 2013-11-23
          • 2012-12-16
          • 1970-01-01
          • 2021-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多