C# 鼠标悬停在按钮上时WPF更改图像
我试图在鼠标悬停在按钮上时更改图像,但它不起作用,这是我试图做的:C# 鼠标悬停在按钮上时WPF更改图像,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,我试图在鼠标悬停在按钮上时更改图像,但它不起作用,这是我试图做的: <Button x:Name="Play" Content="" ClickMode="Press" BorderThickness="0" UseLayoutRounding="True" Height="120" Width="224"> <Button.Background> <ImageBrush ImageSource="Resources/Play 1.gif"/
<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集合成员必须是EventTrigger类型。
如何使其工作?这是正确的-您只能在其中放置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,然后转换为按钮的基本颜色)。我认为您必须重写按钮的
ControlTemplate
,以防止发生这种情况,正如注释中所建议的那样。可能重复或此:FrameworkElement.Triggers仅接受事件触发器。您可能需要覆盖按钮的ControlTemplate并在ControlTemplate.triggers中定义触发器。正如dowhilefor和Chris所说,有许多相同或相似的问题。嗯,背景的图像消失了,它不起作用了!我在测试后编辑了我的答案,使它稍微好一点,但它不能正常工作。很抱歉不过,它排除了一种可能性。这里的问题是,某些Windows主题的默认按钮
模板基本上忽略了鼠标悬停时的Background
。它通过在背景上方的可视树(通常是边框
或矩形
)中添加一个额外元素来更改鼠标上的按钮颜色。问题与触发器无关-即使您只是将背景设置为固定位图,而不尝试更改,背景也会变得模糊。(即使将纯色设置为背景也有同样的问题。)克里斯,你的建议-更改控件模板-是唯一的选择。