Storyboard故事板

动画无疑是WPF中最吸引人的特色之一,使其可以像Flash一样平滑地播放并与程序逻辑进行很好的交互,故事板是增强的时间线,可用来分组多个动画,而且具有控制动画播放的能力:暂停、停止以及改变播放的位置
在这里插入图片描述
TargetName和TargetProperty都是附加属性,这意味着可直接将他们应用于动画,From属性是元素的开始值,To属性是元素属性的结束值,Duration是整个动画执行的时间

然而Storyboard类提供的最基本功能是,能够使用TargetProperty和TargetName属性指向某个特定属性和特定元素,动画类型声明过后,需要使用EventTrigger(事件触发器)触发
在这里插入图片描述
事件触发器:
可以在以下4个位置定义事件触发器
a)、在样式中(Style.Triggers集合):属性触发器,事件触发器
b)、在数据模板中(DataTemplate.Triggers集合)
c)、在控件模板中(ControlTemplate.Triggers集合)
d)、直接在元素中定义事件触发器(FrameworkElement.Triggers集合)
当创建事件触发器时,需要指定开始触发器的路由事件和触发器执行的一个或多个动作。对于动画,最常用的动作是BeginStoryboard,该动作相当于调用BeginAnimation()方法。所有事件触发器都可以启动动作,所有动作都由继承自System.Windows.TriggerAction的类表示

除了使用事件触发器外,还可以使用托管代码触发动画播放,使用托管代码时就需要写后台代码了
在这里插入图片描述
一旦创建故事版,就可以使用其他动作控制故事板,这些动作类都继承自ControllableStoryboardAction类,控制故事版的主要类如下:

  1. PauseStoryboard:停止播放动画并且保持当前位置
  2. ResumeStoryboard:恢复播放暂停的动画
  3. StopStoryboard:停止播放动画,并将动画时钟重新设置到开始位置
  4. SeekStoryboard:跳到动画时间线中的特定位置,如果当前动画正在播放,就继续从新位置播放。如果当前动画是暂停的,就继续保持暂停
  5. SetStoryboardSpeedRatio:改变整个故事板的SpeedRatio属性值
  6. SkipStoryboardToFill:将故事板移动到时间线的终点。FillBehavior属性设置为HoldEnd,动画继续保持最后的值
  7. RemoveStoryboard:移除故事板,停止所有正在运行的动画,并将属性返回为原来的、最后一次设置的数值
    为成功地执行这些动作,必须在同一个Triggers集合中定义所有的触发器,如果将BeginStoryboard动作的触发器和PauseStoryboard动作的触发器放置到不同的集合中,PauseStoryboard动作就无法工作,WPF动画通过一组动画类表示,使用少数几个属性设置相关信息,如开始值、结束值以及持续时间。这显然使他们非常适合于XAMl,不是很清晰的是,如何为特定的事件和属性关联动画,以及如何在正确的时间触发动画
    在这里插入图片描述

在包含元素的Triggers集合中(在这里是Window.Triggers集合),使用EventTrigger.SourceName属性关联这些事件触发器,只要SourceName属性和为按钮设置的Name属性相匹配,触发器就会用到恰当的按钮上。还必须要为BeginStoryboard动作指定名称,这样其他触发器BeginStoryboardName属性指定这个名称,连接到相同的故事板,然后进行控制
在这里插入图片描述
效果图如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44588733/article/details/89374048