一、动画概述
①动画是WPF模型的核心部分。这意味着为了让动画动起来,不需要使用计时器以及事件处理代码,只需要使用声明的方式即可创建动画。
②WPF动画是基于属性的动画。本质上,WPF动画只不过是在一段时间间隔内修改下依赖项属性而已。
③创建正确动画的秘密在于决定需要修改什么属性。
④为了实现属性的动态化,需要有支持相应数据类型的动画类。如Button.Width属性使用双精度数据类型,就必须使用DoubleAnimation类实现动画。
⑤动画分为:线性插值动画、关键帧动画和路径动画
线性插值动画:指在开始值和结束值之间以逐步增加的方式进行的动画。
命名方式:类型名+Animation。如:DoubleAnimation
关键帧动画:指一个值突然改变到另一个值的动画。
命名方式:类型名+AnimationUsingKeyFrames。如:ColorAnimationUsingKeyFrames
从适用范围上将关键帧动画大于线性插值动画。可以这样讲所有支持关键帧动画的数据类型,都支持线性插值动画,但反过来不成立。
路径动画:值沿着指定路径移动的动画,它比前两种动画更加专业。
命名方式:类型名+AnimationUsingPath。如:PointAnimationUsingPath
⑥所有动画类都定义在System.Windows.Media.Animation命名空间下,共计42个。详情见书P352-P353。
二、通过代码创建动画
①每个依赖属性每次只能响应一个动画,如果开始第二个动画,将自动放弃第一个动画。
②线性插值动画的常用属性:
From属性:属性开始值。
若没有硬编码属性值,此时动画省略设置该属性的话,动画无法执行会报错,因为无法获取该属性值。
PRivate void myButtonn_Click(object sender, RoutedEventArgs e){ DoubleAnimation wa = new DoubleAnimation(); wa.From = myButtonn.ActualWidth; wa.To = this.Width - 30; wa.Duration = TimeSpan.FromSeconds(5); myButtonn.BeginAnimation(Button.WidthProperty, wa);}ActualWidth属性指按钮当前渲染时的宽度。这样设置意味着即使在动画执行中单击按钮,也不会使动画从头再来。To属性:属性结束值。
若省略To属性,则意味着回到元素的原始属性值。
By属性:创建按设置的值改变动画,而不是给定目标值。会实现元素触发一下,变化一点的效果。
private void myButtonn_Click(object sender, RoutedEventArgs e){ DoubleAnimation wa = new DoubleAnimation(); wa.From = myButtonn.ActualWidth; wa.By = 10; wa.Duration = TimeSpan.FromSeconds(5); myButtonn.BeginAnimation(Button.WidthProperty, wa);}Duration属性:动画执行时间。三、动画的生命周期①WPF动画是暂时的,它不会能真正改变基本属性的值。
②当动画执行完成时,通过代码设置元素属性值是不起作用的,这是因为元素属性优先使用动画之后的值。
③通过设置AutoReverse属性为True,可反转动画。
④FillBehavior属性。通常该属性值为HoldEnd,这意味着动画结束后,元素属性值为动画结束后的值。若设置该属性值为Stop,则意味着只要动画结束,属性就会自动恢复为原来的值。
⑤AccelerationRatio属性加速动画执行速度,DecelerationRatio属性减速动画执行速度,两个值都用百分比表示。
通过加速和减速的动画看上去更加自然。
⑥RepeatBehavior属性可控制如何重复运行动画。
新闻热点
疑难解答