我想在鼠标悬停时更改我的按钮背景,边距和前景,但它只会改变前景。请帮忙..
<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>
答案 0 :(得分:2)
如果在属性中设置了属性,就像您使用Margin
和Background
一样,那将覆盖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紫色的东西。我不得不问他们谷歌分析是否跟踪了有多少观众自杀。我怀疑他们会回复。客户服务是一种迷失的艺术。