【发布时间】:2014-10-21 22:54:36
【问题描述】:
我有一个 ListBox,我想在其中显示当前状态,并以彩色 Rectangle 滑出。
当项目为Selected 或 MouseOver 时,Recangle 应扩展,否则应缩小。
<ControlTemplate.Resources>
<Storyboard x:Key="MoveOutStoryboard">
<DoubleAnimation To="175"
Storyboard.TargetProperty="Width"
Storyboard.TargetName="AnimatingGrid">
<DoubleAnimation.EasingFunction>
<QuinticEase EasingMode="EaseOut" />
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
<ColorAnimation Storyboard.TargetName="ContentPresenter"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
To="White" />
</Storyboard>
<Storyboard x:Key="MoveInStoryboard">
<DoubleAnimation To="16"
Storyboard.TargetProperty="Width"
Storyboard.TargetName="AnimatingGrid">
<DoubleAnimation.EasingFunction>
<QuinticEase EasingMode="EaseOut" />
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
<ColorAnimation Storyboard.TargetName="ContentPresenter"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
To="Black" />
</Storyboard>
</ControlTemplate.Resources>
由于没有“或”多触发器,我想出了以下触发器:
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource MoveOutStoryboard}" />
</Trigger.EnterActions>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource MoveOutStoryboard}" />
</Trigger.EnterActions>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="False" />
<Condition Property="IsSelected" Value="False" />
</MultiTrigger.Conditions>
<MultiTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource MoveInStoryboard}" />
</MultiTrigger.EnterActions>
</MultiTrigger>
</ControlTemplate.Triggers>
但不知何故,当我设置了最后一个 MultiTrigger 时,从未调用过 MoveOutStoryboard,但我不知道为什么。
感谢您的帮助。
【问题讨论】:
-
这两个故事板动画相同的属性?在激活新的故事板之前尝试停止活动的故事板以访问动画属性。
-
分享一些
MoveOutStoryboard&MoveInStoryboard的示例代码 -
我将情节提要添加到我的问题中。据我了解,最后一个触发器激活的 MoveInStorybard 应该覆盖以前的动画。
标签: wpf xaml triggers storyboard multitrigger