Wpf 在鼠标上更改按钮颜色-XAML

Wpf 在鼠标上更改按钮颜色-XAML,wpf,xaml,Wpf,Xaml,我试图创建一个按钮,将是一个特定的颜色(说红色)。鼠标悬停时,按钮颜色变为其他颜色(如黑色) 以下是我尝试过的: <Style x:Key="CategoryButton" TargetType="Button"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Butt

我试图创建一个按钮,将是一个特定的颜色(说红色)。鼠标悬停时,按钮颜色变为其他颜色(如黑色)

以下是我尝试过的:

<Style x:Key="CategoryButton" TargetType="Button">
        <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="Background" Value="Black"/>
            </Trigger>
        </Style.Triggers>
    </Style>

我把它用作:

<Button x:Name="btnCat1" Click="btnCat1_Click" Background="#FFFF1D1D" Style="{StaticResource CategoryButton}">
    Hello ...
</Button>

你好

问题是当我说
Background=“#FFFF1D1D”
时,触发器颜色不会对按钮进行任何更改。

这是因为您在按钮声明中指定了优先于样式触发器的
Background
(换句话说,是一个局部值)。WPF的属性优先级在msdn中描述

此问题的相关属性页面的简短摘录:

最高优先级列在第一位
3.本地值。
6.样式触发器。
8.风格设定者

解决方案是删除局部值,并改为使用样式进行设置

<Button x:Name="btnCat1"
        Click="btnCat1_Click"
        Style="{StaticResource CategoryButton}">
    Hello ...
</Button>

<Style x:Key="CategoryButton" TargetType="Button">
    <!-- Set background property here -->
    <Setter Property="Background" Value="#FFFF1D1D" />

    <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="Background" Value="Black"/>
        </Trigger>
    </Style.Triggers>
</Style>

你好
如果不希望为所有CategoryButton设置背景,也可以继承样式

<Style x:Key="RedCategoryButton"
       BasedOn="{StaticResource CategoryButton}"
       TargetType="{x:Type Button}">
    <Setter Property="Background" Value="#FFFF1D1D" />
</Style>

您可以使用下面显示的
XAML
中的
WPF
按钮样式的扩展示例(放在Windows
ResourceDictionary
文件中):


0
2.
请注意与

希望这会有所帮助。问候,

<Style TargetType="Button" x:Key="Button_Command">
    <Setter Property="Foreground" Value="#a0a0a0"/>
     <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="ButtonBackground" BorderBrush="#909090">
                    <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/>
                    <Border.BorderThickness>0</Border.BorderThickness>
                    <Border.CornerRadius>2</Border.CornerRadius>
                    <Border.Background>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="#e0e0e0" Offset="0" />
                            <GradientStop Color="#808080" Offset="1" />
                        </LinearGradientBrush>
                    </Border.Background>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                         <Setter TargetName="ButtonBackground" Property="Background">
                            <Setter.Value>
                                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1" >
                                    <GradientStop Color="#f0f0f0" Offset="0" />
                                    <GradientStop Color="#c0c0c0" Offset="0.81" />
                                    <GradientStop Color="#d50101" Offset="0.81" />
                                    <GradientStop Color="#f50101" Offset="1" />
                                </LinearGradientBrush>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="ButtonBackground" Property="Background">
                            <Setter.Value>
                                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1" >
                                    <GradientStop Color="#f0f0f0" Offset="0" />
                                    <GradientStop Color="#c0c0c0" Offset="0.75" />
                                    <GradientStop Color="#d50101" Offset="0.75" />
                                    <GradientStop Color="#f50101" Offset="1" />
                                </LinearGradientBrush>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>