WPF触发器不起作用

时间:2017-05-03 19:43:48

标签: 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/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>

1 个答案:

答案 0 :(得分:2)

如果在属性中设置了属性,就像您使用MarginBackground一样,那将覆盖Style所做的任何事情,因此Style触发器无法对其进行更改。

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

正如Clemens在评论中指出的那样,Dependency Property Value Precedence的规则解释了这种行为。这样做会更好:通常你希望属性覆盖样式,只有在这个触发器情况下你才会希望样式覆盖其他任何东西。

<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>

模糊地偏离主题

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

但作为开发者,这是您的电话。说实话,他们的界面比你的界面要严重得多。它充满了swirly紫色的东西。我不得不问他们谷歌分析是否跟踪了有多少观众自杀。我怀疑他们会回复。客户服务是一种迷失的艺术。