更改鼠标悬停时的按钮颜色 - XAML

gld*_*ael 2 wpf xaml

我正在尝试创建一个具有特定颜色(例如红色)的按钮。在鼠标悬停时,按钮颜色更改为其他颜色(例如黑色)。

这是我尝试过的:

<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>
Run Code Online (Sandbox Code Playgroud)

我用它作为:

<Button x:Name="btnCat1" Click="btnCat1_Click" Background="#FFFF1D1D" Style="{StaticResource CategoryButton}">
    Hello ...
</Button>
Run Code Online (Sandbox Code Playgroud)

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

Pat*_*ick 5

这是因为您已Background在 Button 声明中指定(换句话说,本地值),其优先级高于 Style 触发器。msdn依赖属性值优先级中描述了 WPF 的属性优先级。

页面的简短摘录,包含该问题的相关属性:

最高优先级首先列出
3. 本地值。
6. 风格触发因素。
8. 风格设定者

解决方案是删除本地值并使用 Style 来设置它。

<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>
Run Code Online (Sandbox Code Playgroud)

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

<Style x:Key="RedCategoryButton"
       BasedOn="{StaticResource CategoryButton}"
       TargetType="{x:Type Button}">
    <Setter Property="Background" Value="#FFFF1D1D" />
</Style>
Run Code Online (Sandbox Code Playgroud)