【问题标题】:WPF Trigger Not Working As IntendedWPF 触发器未按预期工作
【发布时间】: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 样式。

【问题讨论】:

    标签: wpf button triggers styles ismouseover


    【解决方案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。这么小的事件代码太多了;(
    猜你喜欢
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    相关资源
    最近更新 更多