WPF触发器没有';行不通

WPF触发器没有';行不通,wpf,Wpf,我想在鼠标悬停时更改按钮的背景、边距和前景,但它只更改前景。请帮忙 <Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/e

我想在鼠标悬停时更改按钮的背景、边距和前景,但它只更改前景。请帮忙

<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:coupleofbuttons"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button x:Name="ButtonX" Margin="10,10,0,0" Content="Button" HorizontalAlignment="Left"  VerticalAlignment="Top" Width="100" Height="46" Background="Green"  BorderThickness="0,0,0,7">
            <Button.Style>
                <Style TargetType="{x:Type Button}">
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="DarkGoldenrod"/>
                            <Setter Property="Foreground" Value="Green"/>
                            <Setter Property="Margin" Value="10,20,0,0"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    </Grid>
</Window>

如果在属性中设置了一个属性,就像您使用
边距
背景
所做的那样,该属性会覆盖样式所做的任何事情,因此样式触发器无法更改它

在样式的Setters中设置这些属性的默认值,但不在Style.Triggers部分中设置。然后去掉你现在拥有的边距和背景属性

正如克莱门斯在一篇评论中所指出的,这种行为是由规则来解释的。这样更好:通常您希望属性覆盖样式,只有在这种触发情况下,您才会希望样式覆盖任何其他内容

<Button 
    x:Name="ButtonX" 
    Content="Button" 
    HorizontalAlignment="Left"  
    VerticalAlignment="Top" 
    Width="100" 
    Height="46" 
    BorderThickness="0,0,0,7"
    >
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Margin" Value="10,10,0,0" />
            <Setter Property="Background" Value="Green" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="DarkGoldenrod"/>
                    <Setter Property="Foreground" Value="Green"/>
                    <Setter Property="Margin" Value="10,20,0,0"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

含糊不清的离题咆哮

就我个人而言,作为一个软件用户,我发现当我点击控件时,控件会移动是非常令人沮丧的,这就是当触发器改变边距时所产生的效果。就在昨天,我向一家网站发送了关于这个问题的反馈。我告诉他们,使用他们的网页就像用棍子戳一只愤怒的浣熊


但作为一名开发人员,这是你的职责。老实说,他们的界面比你的更令人震惊。里面满是紫色的漩涡。我不得不问他们,谷歌分析是否跟踪了有多少观众自杀。我怀疑他们会回答。客户服务是一门失传的艺术

如果在属性中设置了属性,就像您使用
边距
背景
所做的那样,该属性将覆盖样式所做的任何操作,因此样式触发器无法更改它

在样式的Setters中设置这些属性的默认值,但不在Style.Triggers部分中设置。然后去掉你现在拥有的边距和背景属性

正如克莱门斯在一篇评论中所指出的,这种行为是由规则来解释的。这样更好:通常您希望属性覆盖样式,只有在这种触发情况下,您才会希望样式覆盖任何其他内容

<Button 
    x:Name="ButtonX" 
    Content="Button" 
    HorizontalAlignment="Left"  
    VerticalAlignment="Top" 
    Width="100" 
    Height="46" 
    BorderThickness="0,0,0,7"
    >
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Margin" Value="10,10,0,0" />
            <Setter Property="Background" Value="Green" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="DarkGoldenrod"/>
                    <Setter Property="Foreground" Value="Green"/>
                    <Setter Property="Margin" Value="10,20,0,0"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

含糊不清的离题咆哮

就我个人而言,作为一个软件用户,我发现当我点击控件时,控件会移动是非常令人沮丧的,这就是当触发器改变边距时所产生的效果。就在昨天,我向一家网站发送了关于这个问题的反馈。我告诉他们,使用他们的网页就像用棍子戳一只愤怒的浣熊

但作为一名开发人员,这是你的职责。老实说,他们的界面比你的更令人震惊。里面满是紫色的漩涡。我不得不问他们,谷歌分析是否跟踪了有多少观众自杀。我怀疑他们会回答。客户服务是一门失传的艺术