【问题标题】:WPF change Image when mouse hover on button鼠标悬停在按钮上时 WPF 更改图像
【发布时间】:2013-08-01 14:29:09
【问题描述】:

当鼠标悬停在按钮上时,我正在尝试更改图像,但它不起作用是我想要做的:

<Button x:Name="Play" Content="" ClickMode="Press" BorderThickness="0" UseLayoutRounding="True" Height="120" Width="224">
    <Button.Background>
        <ImageBrush ImageSource="Resources/Play 1.gif"/>
    </Button.Background>
    <Button.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="ImageBrush.ImageSource" Value="Resources/Play 2.gif"></Setter>
        </Trigger>
    </Button.Triggers>
</Button>

但这给了我这个错误:Triggers collection members must be of type EventTrigger.

我该如何让它发挥作用?

【问题讨论】:

  • 可能重复this
  • FrameworkElement.Triggers 只接受事件触发。您可能需要覆盖 Button 的 ControlTemplate 并在 ControlTemplate.Triggers 中定义您的触发器。正如 dowhilefor 和 Chris 所建议的,有许多相同或相似的问题。

标签: c# wpf wpf-controls


【解决方案1】:

没错——你只能把 EventTriggers 放在那里。您需要将触发器移动到按钮的样式中:

<Button x:Name="Play" Content="" ClickMode="Press" BorderThickness="0" UseLayoutRounding="True" Height="120" Width="224">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Background">
                <Setter.Value>
                    <ImageBrush ImageSource="..\Resources\Play 1.gif"/>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background">
                        <Setter.Value>
                            <ImageBrush ImageSource="..\Resources\Play 2.gif"/>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
         </Style>
    </Button.Style>
</Button>

类似的东西,我想(还没有测试过)。

编辑:这会在正确的图像之间切换,但不能正常工作(它从 Play 1.gif 开始,过渡到 Play 2.gif,然后过渡到按钮的基础颜色)。我认为您必须按照 cmets 中的建议覆盖按钮的 ControlTemplate 以防止这种情况发生。

【讨论】:

  • 嗯背景的图像消失了,它不工作了!
  • 我在测试后编辑了我的答案,使它稍微好一点,但它不能正常工作。对不起。不过,它消除了一种可能性。
  • 这里的问题是某些Windows主题的默认Button模板在鼠标悬停时基本上会忽略Background。它使用背景顶部的可视树中的额外元素(通常是BorderRectangle)更改鼠标悬停时的按钮颜色。该问题与触发器无关 - 即使您只是将背景设置为您不尝试更改的固定位图,背景也会变得模糊。 (即使将纯色设置为背景也有同样的问题。)克里斯,您的建议 - 更改控件模板 - 是唯一的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
相关资源
最近更新 更多