按钮上的IsMouseOver属性不起作用

时间:2019-04-15 09:24:05

标签: wpf xaml button triggers mouseover

我有此按钮,如果我将鼠标悬停在其上,则想更改设计。它不起作用,我没有收到错误消息。 我究竟做错了什么? (我真的是WPF的新手)

    <Button MaxWidth="180"
            Margin="5"
            DockPanel.Dock="Top"
            Padding="5"
            FontSize="12"
            Foreground="#1261AC"
            FontWeight="SemiBold"
            BorderBrush="Transparent">
        <Button.Style>
            <Style TargetType="Button">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Border CornerRadius="5" Background="LightGray" BorderThickness="1" Padding="5">
                                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="Foreground" Value="#157ec4"/>
                        <Setter Property="Background" Value="#000000"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

按钮本身可以工作,但不能改变背景或字体的颜色。 (我的示例中的颜色仅用于测试)

1 个答案:

答案 0 :(得分:0)

代码的问题是您直接将边框背景定义为灰色。 现在,您可以使用触发器更改控件背景。 但是,由触发器设置的背景在您的示例中尚未与边框背景相关。我添加了一个模板绑定,可以解决此问题。现在,模板中的边框将始终具有由样式定义的背景,由触发器设置或直接在XAML中设置。

请注意: 如果使用<Button Background="Pink"/>在XAML中设置颜色,这将覆盖样式和触发器属性。

尝试一下这件艺术品:

enter image description here

<Button Content="Hello there!"
    MaxWidth="180"
    Margin="5"
    DockPanel.Dock="Top"
    Padding="5"
    FontSize="12"
    Foreground="#1261AC"
    FontWeight="SemiBold"
    BorderBrush="Transparent">
<Button.Style>
    <Style TargetType="Button">
        <Setter Property="Background" Value="HotPink"></Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border CornerRadius="5" Background="{TemplateBinding Background}" BorderThickness="1" Padding="5">
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Foreground" Value="Red" />
                <Setter Property="Background" Value="Lime" />
            </Trigger>
        </Style.Triggers>
    </Style>
</Button.Style>