鼠标悬停样式触发器不会更改背景

MouseOver style trigger won't change background

WPF 新手,网络背景。

我的样式触发器不会更改按钮背景。样式 XAML:

<Window.Resources>
    <Style TargetType="Button">
        <Setter Property="Background" Value="GhostWhite" />
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="#F48230"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources> 

按钮 XAML(与 Window 或网格属性无关):

<Window...>
    <Grid...>
        <StackPanel Orientation="Horizontal" Grid.Row="7" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Center">
            <Button Name="btnEdit" Cursor="Hand" Content="Edit Settings..." HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Margin="0,0,5,0" Click="btnEdit_Click"/>
            <Button Name="btnExit" Cursor="Hand" Content="Exit" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Margin="5,0,0,0" Click="btnExit_Click" />
        </StackPanel>
    </Grid>
</Window>

按钮会选择资源部分中的背景样式,但不会选择触发器 - 鼠标悬停会导致默认行为。

补充问题:有什么方法可以调试吗?我查看了 Live Visual Tree,但不知道如何获取我需要的信息。

WPF 控件具有类型为 ControlTemplateTemplate 属性。这个 属性 告诉 WPF 如何在屏幕上绘制控件。 WPF 按钮在其 ControlTemplate 中使用 Windows Chrome,它使用用户选择的系统颜色以允许不同应用程序之间的一致性。利用 WPF 和 XAML 的魔力,您可以创建自己的 ControlTemplate 使按钮看起来像您认为合适的任何方式。

创建带有键的样式,以便您可以选择哪些按钮使用模板:

<Window.Resources>
    <Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="Background" Value="GhostWhite" />
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <!-- a simple square button -->
                    <Border Name="wrapper"
                            Width="{TemplateBinding Width}"
                            Height="{TemplateBinding Height}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            Margin="{TemplateBinding Margin}"
                            Background="#01000000">
                        <!-- notice the wrapper has a background that is NEAR transparent. This is important. It'll ensure the button raises the click event -->
                        <Border Name=inner
                                Background="{TemplateBinding Background}">
                            <ContentPresenter Margin="{TemplateBinding Padding}"
                                              HorizontalAlignment="Center"
                                              VerticalAlignment="Center" />
                        </Border>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
       <Style.Triggers>
           <Trigger Property="IsMouseOver" Value="True">
               <Setter Property="Background" Value="#FFF48230"/>
           </Trigger>
           <Trigger Property="IsPressed" Value="true">
               <Setter Property="Background" Value="#FF99501B"/>
           </Trigger>
       </Style.Triggers>
    </Style>
</Window.Resources> 

然后在按钮上使用模板:

<Window...>
    <Grid...>
        <StackPanel Orientation="Horizontal" Grid.Row="7" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Center">
            <Button Style="{StaticResource MyButtonStyle}" Name="btnEdit" Cursor="Hand" Content="Edit Settings..." HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Margin="0,0,5,0" Click="btnEdit_Click"/>
            <Button Style="{StaticResource MyButtonStyle}" Name="btnExit" Cursor="Hand" Content="Exit" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Margin="5,0,0,0" Click="btnExit_Click" />
        </StackPanel>
    </Grid>
</Window>