咱们所实现的的动画中,很大一部分是让一个属性在起始值和结束值之间变化,例如,我在前文中实现的改变宽度的动画:html
var widthAnimation = new DoubleAnimation()
{
From = 0,
To = 320,
Duration = TimeSpan.FromSeconds(2),
RepeatBehavior = RepeatBehavior.Forever,
};
button.BeginAnimation(WidthProperty, widthAnimation); windows
这个动画实现了宽度在0和320之间的变化,因为宽度是一个double型,所以这里用的是DoubleAnimation。对于一些其它常见的类型,如Byte、Color、Int3二、Size、Point等,在System.Windows.Media.Animation下都有相应的过渡动画实现,命名规则是"数据结构类型+Animation"这里就很少介绍了。 数据结构
这种过渡动画通常成为From/To/By 动画,是由于它们是经过From、To、By三个属性来决定了目标属性的起始值和结束值。首先咱们来看下这三个属性表明的意义: post
-
From: 起始值,在动画开始的时候将目标属性设置为该值
-
To: 结束值,动画结束是目标属性为改值
-
By: 偏移值:动画结束的时候目标属性为"初始值+偏移值"
很明显,To和By的效果是有可能冲突的。实际上,这三个属性都是可选设置的,而且在设置了To和By的时候,是会忽略By属性的。下面我再经过一些简单的场景介绍一下这三个属性如何组合使用。 动画
-
由0 变为 320: From = 0, To = 320
-
由初始值变为320: To = 320
-
由0变为初始值: From = 0
-
由0增大150: From = 0, By = 150
-
由初始值增大150: By = 150
看了这几个用例后,相信你们已经大体能明白这三个参数的使用方法。 url
为何这么设计 设计
初一看上去,这种From、To、By的三参数设计得过于复杂,彻底能够用From和To两个参数能够肯定,须要用到By的地方经过运算获取。 甚至From和To也能够强制要求赋值,这样就不会出现From和To都不赋值的这种非法状况了。为何要这么设计呢? 我以为有两个缘由: htm
-
这种比较灵活的方式能够方便将动画和具体的对象分离出来,能够方便复用和组合。
-
方便在XAML中使用。若是像我上述的那样的作法,不少时候须要取对象的初始值,用XAML编写复杂的动画时,这种操做并非是很方便。
时间控制 对象
这里只介绍了如何设置过渡动画的起始状态和终止状态,动画还有一个比较重要部分是时间控制,如动画时间段的长度、开始时间、重复次数、进度的快慢,结束通知等。这些都是在其基类TimeLine中控制的,下一章将单独对其介绍。 blog
参考资料
http://msdn.microsoft.com/zh-cn/library/aa970265(v=vs.110).aspx