none
一个property trigger修改button background的问题 RRS feed

  • 问题

  • 在Wpf .net 4.72中, 我想给一个按钮修改鼠标划过后的字体大小,前景色和背景色. 使用了如下的代码. 结果发现在不使用代码注释掉的Template情况下, 字体大小和文字前景色均能在鼠标划过后得到修改, 但是背景色在鼠标划过后仍然表现出了默认的行为(变成浅蓝色), 而不是希望得到的红色. 

    只有在加入注释的template部分代码后, 背景色才能得到希望的改动. 

    请问这是一个bug吗?

    <Button
        Height="40"
        Width="120"
        Content="Close">
        <Button.Style>
            <Style TargetType="Button">
                <Setter Property="Background" Value="Yellow" />
                <!--<Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Border Background="{TemplateBinding Background}">
                                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>-->
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="FontSize" Value="30" />
                        <Setter Property="Foreground" Value="Pink" />
                        <Setter Property="Background" Value="Red" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

    2021年1月12日 3:28

答案

  • 你好,

    关于这个问题,官方文档中给出了详细的解释,文档:Control.Background

    此 Background 属性仅适用于控件的静止状态。 控件的状态发生更改时,控件的默认样式指定其外观。 例如,如果在 Background 上设置属性 Button ,则只有未按下或禁用此按钮时,该按钮才具有该值。 若要创建具有更高级的背景自定义的控件,必须定义该控件的样式。

    谢谢

    Daisy Tian


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 wpf.life 2021年1月13日 0:44
    2021年1月12日 6:59

全部回复

  • 你好,

    关于这个问题,官方文档中给出了详细的解释,文档:Control.Background

    此 Background 属性仅适用于控件的静止状态。 控件的状态发生更改时,控件的默认样式指定其外观。 例如,如果在 Background 上设置属性 Button ,则只有未按下或禁用此按钮时,该按钮才具有该值。 若要创建具有更高级的背景自定义的控件,必须定义该控件的样式。

    谢谢

    Daisy Tian


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 wpf.life 2021年1月13日 0:44
    2021年1月12日 6:59
  • 完美, 非常感谢你的帮助!
    2021年1月13日 0:44