WPF按钮触发器样式无法识别背景

时间:2014-10-23 05:56:26

标签: c# wpf wpf-controls wpf-style

我正在处理按钮样式,悬停效果给我一些问题。我做了搜索,但没有找到我的答案(或者没有正确搜索,所以我决定在这里问一下)。我在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

2 个答案:

答案 0 :(得分:3)

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

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

还可以移动您的二传手(或者更确切地说是他们的内容)作为模板边框的边框。

答案 1 :(得分: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>