WPF中的动画——序

WPF中的动画功能可以让你非常容易地把动态效果添加到应用程序或者组件中。这也是WPF中最容易被滥用的特性之一。用好了,可以让我们的软件受益匪浅。

 

WPF中,动画有着明确的定义:随着时间的推移变化属性的值。因此,为了达到这一目的,可以几种方式来实现。

 

一、定时器实现动画

配置一个定时器,然后依据定时器的频率循环地调用它的回调函数。在回调函数中,你可以手工地更新目标的属性值,直到它的最终值。当然,为了达到这一目的,WPF还提供了一个定时器类——DispatcherTimer类。这种方式可能是大家都熟悉的方式,但并不是推荐的办法。定时器无法依据显示器的垂直刷新率进行同步,也不能与WPF渲染引擎同步。

 

二、Rendering事件

与定时器实现动画不同,通过为System.Windows.Media.CompositionTarget.Rendering事件添加处理程序,可以实现基于帧的动画。它不是在定制的时间区间引发,而是在布局后和渲染前的每帧引发。

Rendering事件给出了最好的性能和可定制性。在通常情况下只有当部分UI失效时,WPF才会渲染帧。但是只要Rendering事件上添加了处理程序,WPF就会连续地渲染帧。因此,Rendering对短动画是最好的选择。

 

三、动画类

WPFSystem.Windows.Media.Animation命名空间中定义了许多类,它们让你不需要手工地实现Rendering事件,就可以描述和应用动画,成为你简单又得力的帮手。这些类是极其有用的,它们提前告诉你动画会如何表现。

这些动画有两个重要的方面:

1)它们只能改变一个依赖属性的值。

2)它们使动画变得“时间分辨率无关”。动画不会在硬件变快时也变得更快,它们只是会变得更平滑。WPF会基于不同的条件改变帧率,作为动画开发人员,你并不需要关心这一点。

posted on 2009-03-01 22:50  xirihanlin  阅读(1628)  评论(0编辑  收藏  举报