wpf 为什么我的按钮样式在另一个样式的资源中声明时没有应用?[duplicate]

km0tfn4u  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(122)
    • 此问题在此处已有答案**:

How do you change Background for a Button MouseOver in WPF?(6个答案)
11小时前关门了。
截至11小时前,社区正在审查是否重新讨论这个问题。
我不明白为什么在鼠标悬停的时候不改变背景和前景,而是改变了边框的角半径。
ButtonStyle.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="Button" x:Key="RoundedCorners">
        <Style.Resources>
            <Style TargetType="{x:Type Button}">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="Red"/>
                        <Setter Property="Foreground" Value="Green"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
            <Style TargetType="Border">
                <Setter Property="CornerRadius" Value="5"/>
            </Style>
        </Style.Resources>
    </Style>
</ResourceDictionary>

LoginView.xaml

<Button Height="50"
        Width="200"
        Style="{StaticResource RoundedCorners}">
    LOGIN
</Button>
6tdlim6h

6tdlim6h1#

在WPF中,通过Style={StaticResource StyleKey}本地设置的显式Style优先于通过TargetType匹配的隐式样式,如下所述。
因此,只有外部的Style被应用到您的Button,因为它被给定了一个键并进行了扩展设置。
要解决这个问题,你应该将内部的Style合并到键控的Style中,如下所示:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="Button" x:Key="RoundedCorners">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Red"/>
                <Setter Property="Foreground" Value="Green"/>
            </Trigger>
        </Style.Triggers>
        <Style.Resources>
            <Style TargetType="Border">
                <Setter Property="CornerRadius" Value="5"/>
            </Style>
        </Style.Resources>
    </Style>
</ResourceDictionary>

当你悬停在Foreground上时,Foreground会正确地改变,Background仍然不会改变,但这是一个完全不同的问题。

相关问题