WPF中Animation类动画分两种:一种线性插值动画、一种关键帧动画。WPF对动画的使用有三种:线性插值、关键帧以及路径。追溯根源其实WPF的动画知识在间隔一段时间内对依赖属性的值进行修改的一种方式。而Animation类的作用就在于给属性实现动态化,让绝大多数数据类型提供使用动画类。细说下来Animation类两种类型的动画也都有它自己的具体定义概念。线性插值动画指的是一种在开始值和结束值之间以逐步增加的方式改变属性的动画;关键帧动画是一种从一个值突然变成另外一个值的动画。关键帧动画的命名格式一般以"类型名 + AnimationUsingKeyFrames "形式存在。在排除不支持动画的类型情况外,关键帧动画类是所有的数据类型都可以拥有的。
WPF常用的是线性插值动画,使用修改元素的BeginAnimation()方法,XAML页面所有元素,从UIElement基类开始,都继承了BeginAnimation()方法,该方法是IAnimatable接口的一部分。 再转到后台C#代码中,From属性时元素开始变动的开始值,属性To为动画结束值,除开非数值数据类型的情况外,结束值我们也可以使用By属性来设置元素的结束值。整个动画的执行时间可以用Duration属性。下面的代码DEMO简单演示了一个基础动画的实现过程,我们还存在有同时发生的动画情况,这个时候只需要去创建多个Animation类动画以及设置它们对应的元素属性值即可。


DEMO中XAML页面的元素我们知道都是继承了BeginAnimation()方法,由此我想到了另外一个动画事件,Completed事件,联想与其的原因在于:使用Completed事件时,要将事件设置BeginAnimation()方法之前,否则不起作用。在Completed中,可通过调用BeginAnimation()方法来渲染不活动的动画,为此,只需要指定属性,并为动画对象传递null引用。
上面的DEMO只是一个WPF的最基础动画,而且从DEMO可以看得到WPF的动画只是一个暂时的过程,当处于动画运动变化的状态时,元素的属性值只是被覆盖掉了,而非真正意义上从根源去改变元素属性的值。这种情况我们称之为单向动画,针对单向动画这种在动画完成仍能做到修改元素属性的值,延续动画的生命周期,可以改变设置AutoReverse和FillBehavior的属性值。1,设置AutoReverse属性,如果将该属性设置为true,将会反向运动,返回原始的值(不适合动画完成后,再为属性设置最后的值,只是还原为动画之前的值),2,改变FillBehavior属性。通常,FillBehavior属性设置为HoldEnd,当动画结束时,会继续为目标元素应用最后的值。如果将FillBehavior属性改为Stop,只要动画结束,属性就会恢复为原来的值。这两种属性都是适用于动画结束后使用,再次为其设置新值,,FillBehavior属性一般不与AutoReverse配合着同时去使用,二者当中选择其一即可。这些我们提到的改变动画的属性也可以统一称为TimeLine类。AcclerationRation和DecelerationRation属性压缩部分时间轴,使动画运行的更快,并将拉伸其他时间进行补偿,使总时间保持不变。这两个属性都表示百分比值。

RepeataBehavior属性由单词字面意思重复的多次的,顾名思义可以控制如何重复运行动画,若想要的动画效果可以重复固定次数,就为RepeatBehavior构造函数传递合适的次数即可实现理想效果。动画变化的永久性代码语句设置为RepeatBehavior.Forever;

WPF故事版的出现就是为了让时间和属性关联的动画有正确的关联性,以及在正确的时间及时可以去触发所需要的动画效果。通过故事板将动画指定到合适的元素和属性。 事件触发器:事件触发器响应属性变化或事件,并控制故事板。 故事板是增强的时间线,可用来分组多个动画,而且具有控制动画播放的能力暂停、停止以及播放位置。故事板的附加属性TargetProperty和TargetName。演示一个创建的简单的故事版DEMO。

故事版中的附加属性TargetProperty和TargetName属于Style.Triggers样式事件触发器的集合中的元素。除了在样式中定义事件的触发器,我们也可以在数据模板中(DataTemplate.Triggers)。在控件模板中(ControlTemplate.Triggers)甚至无需在窗体资源中定义这种模板集合,而是直接在元素中定义事件触发器(FrameworkElement.Triggers)。控制故事版变化的类称之动作类。它们都继承ControllableStoryboardAction类,常用的动作类主要作用来是动画进行停止播放,恢复播放暂停动画,使动画到指定位置,改变故事版属性,移除故事版停止动画等等操作。下面是具体类与功能的详细对应

WPF常用的是线性插值动画,使用修改元素的BeginAnimation()方法,XAML页面所有元素,从UIElement基类开始,都继承了BeginAnimation()方法,该方法是IAnimatable接口的一部分。 再转到后台C#代码中,From属性时元素开始变动的开始值,属性To为动画结束值,除开非数值数据类型的情况外,结束值我们也可以使用By属性来设置元素的结束值。整个动画的执行时间可以用Duration属性。下面的代码DEMO简单演示了一个基础动画的实现过程,我们还存在有同时发生的动画情况,这个时候只需要去创建多个Animation类动画以及设置它们对应的元素属性值即可。


DEMO中XAML页面的元素我们知道都是继承了BeginAnimation()方法,由此我想到了另外一个动画事件,Completed事件,联想与其的原因在于:使用Completed事件时,要将事件设置BeginAnimation()方法之前,否则不起作用。在Completed中,可通过调用BeginAnimation()方法来渲染不活动的动画,为此,只需要指定属性,并为动画对象传递null引用。
上面的DEMO只是一个WPF的最基础动画,而且从DEMO可以看得到WPF的动画只是一个暂时的过程,当处于动画运动变化的状态时,元素的属性值只是被覆盖掉了,而非真正意义上从根源去改变元素属性的值。这种情况我们称之为单向动画,针对单向动画这种在动画完成仍能做到修改元素属性的值,延续动画的生命周期,可以改变设置AutoReverse和FillBehavior的属性值。1,设置AutoReverse属性,如果将该属性设置为true,将会反向运动,返回原始的值(不适合动画完成后,再为属性设置最后的值,只是还原为动画之前的值),2,改变FillBehavior属性。通常,FillBehavior属性设置为HoldEnd,当动画结束时,会继续为目标元素应用最后的值。如果将FillBehavior属性改为Stop,只要动画结束,属性就会恢复为原来的值。这两种属性都是适用于动画结束后使用,再次为其设置新值,,FillBehavior属性一般不与AutoReverse配合着同时去使用,二者当中选择其一即可。这些我们提到的改变动画的属性也可以统一称为TimeLine类。AcclerationRation和DecelerationRation属性压缩部分时间轴,使动画运行的更快,并将拉伸其他时间进行补偿,使总时间保持不变。这两个属性都表示百分比值。

RepeataBehavior属性由单词字面意思重复的多次的,顾名思义可以控制如何重复运行动画,若想要的动画效果可以重复固定次数,就为RepeatBehavior构造函数传递合适的次数即可实现理想效果。动画变化的永久性代码语句设置为RepeatBehavior.Forever;

WPF故事版的出现就是为了让时间和属性关联的动画有正确的关联性,以及在正确的时间及时可以去触发所需要的动画效果。通过故事板将动画指定到合适的元素和属性。 事件触发器:事件触发器响应属性变化或事件,并控制故事板。 故事板是增强的时间线,可用来分组多个动画,而且具有控制动画播放的能力暂停、停止以及播放位置。故事板的附加属性TargetProperty和TargetName。演示一个创建的简单的故事版DEMO。

故事版中的附加属性TargetProperty和TargetName属于Style.Triggers样式事件触发器的集合中的元素。除了在样式中定义事件的触发器,我们也可以在数据模板中(DataTemplate.Triggers)。在控件模板中(ControlTemplate.Triggers)甚至无需在窗体资源中定义这种模板集合,而是直接在元素中定义事件触发器(FrameworkElement.Triggers)。控制故事版变化的类称之动作类。它们都继承ControllableStoryboardAction类,常用的动作类主要作用来是动画进行停止播放,恢复播放暂停动画,使动画到指定位置,改变故事版属性,移除故事版停止动画等等操作。下面是具体类与功能的详细对应
