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 触发器未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Windows Phone:警报类未按预期触发

e.PreventDefault()未按预期触发,表单提交[重复]

Safari:媒体查询未按预期宽度触发

setNeedsDisplay 未按预期在子视图中触发 drawRect

Firebase云功能Firestore触发onWrite在本地测试时未按预期运行

Angular ngOnit () 未按预期工作