0

我正在研究按钮样式,悬停效果给我带来了一些问题。我进行了搜索,但没有找到我的答案(或者更可能没有正确搜索)所以我决定在这里问。我在我的 WPF 用户控件中指定以下样式,然后在按钮上设置此样式。

<Style x:Key="TileButton" TargetType="Button">
            <Setter Property="BorderThickness" Value="1" />
            <Setter Property="BorderBrush" Value="Black" />
            <Setter Property="Height" Value="80" />
            <Setter Property="Width" Value="80" />
            <Setter Property="Margin" Value="10,10,0,0" />
            <Setter Property="Background" Value="#FF91b220" />
            <Setter Property="FontWeight" Value="Bold" />
            <Setter Property="Foreground" Value="White" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="#FF91b220" />
                </Trigger>
            </Style.Triggers>

        </Style>

一切似乎都正常,除了当我将鼠标悬停在按钮上时,而不是我想要的保持一致的背景颜色,它恢复为默认的 WPF 浅蓝色颜色。我尝试添加其他属性更改,例如增加鼠标悬停时的高度,以确认这些更改生效。似乎只是想阻止我的背景。

TIA

4

2 回答 2

3

您必须完全覆盖按钮的继承 Windows 样式。尝试将以下代码片段添加到您的样式中。

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type Button}">
            <Border Background="{TemplateBinding Background}">
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
        </ControlTemplate>
    </Setter.Value>
</Setter>

还要移动您的设置器(或更确切地说是它们的内容)以在模板内的边框上设置边框。

于 2014-10-23T07:03:28.977 回答
1

按钮的这种行为在默认按钮样式中定义,“鼠标悬停”颜色被定义为绑定。要在鼠标悬停时保留颜色,您可以覆盖按钮模板,例如:

<Style  TargetType="Button">
                <Setter Property="OverridesDefaultStyle" Value="True"/>
                <Setter Property="FontWeight" Value="Bold" />
                <Setter Property="Foreground" Value="White" />                   

                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Border BorderThickness="1"
                                    Margin="10,10,0,0"                         
                                    BorderBrush="Black"                            
                                    Background="#FF91b220"
                                    Height="80"
                                    Width="80">

                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>


            </Style>
于 2014-10-23T07:09:41.627 回答