WPF 触发器未按预期工作
Posted
技术标签:
【中文标题】WPF 触发器未按预期工作【英文标题】:WPF Trigger Not Working As Intended 【发布时间】:2013-07-19 11:53:38 【问题描述】:我想要一个红色按钮,当鼠标悬停在它上面时会变黑。
<Button Content="Hover me" Grid.Column="3" Grid.Row="3">
<Button.Style>
<Style TargetType="x:Type Button">
<Setter Property="Background" Value="Red"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Black"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
但是,我的问题是,当我将鼠标悬停在按钮上时,它会变成带有渐变灰色外观的默认 Windows 样式。
【问题讨论】:
【参考方案1】:试试看
<Window.Resources>
<Style x:Key="MyButtonStyle" TargetType="x:Type Button">
<Setter Property="Background" Value="Red"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="x:Type Button">
<Border Background="TemplateBinding Background"
BorderBrush="TemplateBinding BorderBrush"
BorderThickness="TemplateBinding BorderThickness">
<ContentPresenter x:Name="PART_Content"
VerticalAlignment="TemplateBinding VerticalContentAlignment"
HorizontalAlignment="TemplateBinding HorizontalContentAlignment"
TextElement.Foreground="TemplateBinding Foreground"></ContentPresenter> </Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
并应用自定义样式如下
<Button Content="Hover me" Style="StaticResource MyButtonStyle" Height="30" Width="100"/>
原因是按钮的默认 Aero 样式。它在 ControlTemplate 中定义了一个镶边,它在各种鼠标事件上都有自己的行为。所以写你的触发器调用。
所以你必须覆盖 Button 的默认 ControlTemplate 才能达到你想要的结果。
【讨论】:
我一直在寻找几个小时,这工作谢谢你!但是,必须有更好的方法 - 在胡佛上使用多行而不是简单的触发器作为背景颜色会很好。而不是那个可怕的 ControlTemplate。这么小的事件代码太多了;(以上是关于WPF 触发器未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
e.PreventDefault()未按预期触发,表单提交[重复]
setNeedsDisplay 未按预期在子视图中触发 drawRect