【发布时间】:2016-04-08 08:56:50
【问题描述】:
这是我的代码:
<StackPanel>
<StackPanel.Resources>
<Style x:Key="stlNavButtonBorder" TargetType="Border">
<Setter Property="BorderBrush" Value="#570000FF" />
<Setter Property="BorderThickness" Value="5" />
<Setter Property="Height" Value="100" />
<Setter Property="Width" Value="200" />
<Setter Property="Margin" Value="10" />
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="BorderBrush.Color"
To="blue"
Duration="0:0:0.25"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="BorderBrush.Color"
To="#570000FF"
Duration="0:0:0.25" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseDown">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="BorderBrush.Color"
To="Black"
Duration="0:0:0.25" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
<Style x:Key="stlNavButtonRectangle" TargetType="Rectangle">
<Setter Property="Fill" Value="#570000FF"/>
</Style>
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Style="{StaticResource stlNavButtonBorder}">
<Grid>
<Rectangle Style="{StaticResource stlNavButtonRectangle}"/>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Resources>
<Button Content="Button 1" />
<Button Content="Button 2"/>
<Button Content="Button 3" />
</StackPanel>
它会生成这些按钮:
问题是当鼠标按下按钮时,边框不会从蓝色变为黑色,就像我在MouseDown 事件触发器中尝试做的那样,而是消失了,也就是MouseLeave事件触发器。
如何解决?谢谢。
【问题讨论】:
-
如果您检查默认控件模板,您会看到一些使用视觉状态组(过渡动画),而另一些使用诸如
IsMouseOver、IsEnabled和IsPressed等属性的触发器.使用其中一种方法,您可能会取得更大的成功。 -
@PaulF - 我无法通过此链接找到解决方案...
-
@PieterWitvoet - 你能详细说明一下吗?我对 WPF 很陌生,我将不胜感激。非常感谢!
-
您可以在 MSDN 上找到示例控件模板。这是 .Net 框架 4 的按钮控件模板:msdn.microsoft.com/en-us/library/ms753328%28v=vs.100%29.aspx - 您也可以在那里选择不同的框架版本(旧示例显示更多属性)。