动画(animation)是 Silverlight 一项关键特性。它提供了炫目的视觉效果,这是基于服务器编程的框架无法仿效的(例如 ASP.NET)。在 Sileverlight 中动画可以实现很多效果(例如,鼠标经过时图标变大、logo 旋转、文本滚入视图等),也可以用来实现更宏大的商业设计和基于浏览器的游戏。
动画是 Silverlight 模型的核心部分。这意味着你不需要以计时器和事件处理代码来实现它们,而是通过少数几个类来声明并配置它们。
动画基础知识
Silverlight 动画是一个精简版的 WPF 动画系统。为了便于理解,需要了解以下关键规则:
- Silverlight 执行以时间为基础的动画。因此,需要设定初始状态、最终状态、持续时间,而 Silverlight 计算出帧速。
- Silverlight 使用基于属性的动画模型。这意味着一个动画只能做一件事:修改时间间隔的属性值。在很多方面,这是个很大的限制,但仅仅修改属性,也能创建出多得超乎想像的效果了。
- 要赋予动画一个属性,就需要使用一个支持这种数据类型的动画类。例如,修改数据类型为 double 的属性,必须使用 DoubleAnimation 类。
Silverlight 中的动画类比较少,只有有限的数据类型可以使用。目前,能用来修改动画属性的数据类型有 double、object、Color、Point。
定义动画
创建动画是一个多步的过程。需要创建 3 个要素:执行动画的动画对象、管理动画的演示图板、启动演示图板的事件触发器。
Silverlight 有两种动画类,采用不同的变更属性值策略:
- 线性插值:使用线性策略,属性值在动画的持续时间内逐渐变化,这种策略的例子包括 DoubleAnimation、ColorAnimation、PointAnimation。
- 关键帧动画:使用关键帧策略,属性值可以从一个值跳跃到另一个值,或者结合跳跃和线性插值策略。这种策略的例子包括 DoubleAnimationUsingKeyFrames、ColorAnimationUsingKeyFrames、PointAnimationUsingKeyFrames。
本文只介绍最常用的动画类:DoubleAnimation 类。它采用线性插值,在最小值和最大值之间选择双精度值。和所有动画类一样,被定义在 System.Windows.Media.Animation 命名空间中。
虽然动画并不是元素,但仍然可用 XAML 标记定义。下面的标记创建一个 DoubleAnimation :
<DoubleAnimation From="160" to="300" Duration="0:0:5"></DoubleAnimation>
这个动画持续5秒(Duration 属性格式:时:分:秒:毫秒),目标值在 160 – 300 之间变化。如果这个 DoubleAnimation 能以 Silverlight 默认的最高帧速运行,动画值每秒调整 60 次。
StoryBoard 类
演示图板用来管理动画的时间轴,可以用来组织多个动画,也可以用它来控制动画的播放、暂停、停止和改变它的位置。StoryBoard 类提供的最基本功能却是用 TargetProperty 和 TargetName 属性来指定特定的属性和特定的元素。换言之,演示图板是动画和要设置的动画属性之间的桥梁。
下面的标记定义一个演示图板,为名为 cmdGrow 的按钮的 Width 属性赋予 DoubleAnimation 类:
Storyboard.TargetProperty="Width">
<DoubleAnimation From="160" To="300" Duration="0:0:5" ></DoubleAnimation>
</Storyboard>