您好,欢迎访问三七文档
WindowsPresentationFoundation(WPF)提供了一组强大的图形和布局功能,通过应用这些功能,可以创建漂亮的用户界面和吸引人的文档。动画不仅可以使漂亮的用户界面更加引人注目,还可以使其更加便于使用。只需对背景色进行动画处理或应用动画Transform,就可以创造出生动的屏幕过渡效果或提供有帮助的视觉提示。本概述介绍了WPF动画和计时系统,并使用演示图板重点讨论WPF对象的动画。本主题包括以下部分。动画简介动画是快速播放一系列图像(其中每个图像与下一个图像略微不同)给人造成的一种幻觉。大脑感觉这组图像是一个变化的场景。在电影中,摄像机每秒钟拍摄许多照片(帧),便可使人形成这种幻觉。用投影仪播放这些帧时,观众便可以看电影了。计算机上的动画与此类似。例如,使一个矩形逐渐从视野中消失的程序可能按以下方式工作。程序创建一个计时器。程序按照设置的时间间隔检查计时器以查看经历了多长时间。程序每次检查计时器时,它将根据经历的时间来计算矩形的当前不透明度值。然后程序用新值更新矩形并重画此矩形。在WPF出现之前,MicrosoftWindows开发人员必须创建和管理自己的计时系统或使用特殊的自定义库。WPF包括一个通过托管代码和可扩展应用程序标记语言(XAML)公开的高效计时系统,该系统紧密地集成到WPF框架中。通过使用WPF动画,可以轻松地对控件和其他图形对象进行动画处理。WPF可以高效地处理管理计时系统和重绘屏幕的所有后台事务。它提供了计时类,使用这些类,可以重点关注要创造的效果,而非实现这些效果的方法。另外,WPF通过公开动画基类(您的类可以继承自这些类)让您可以轻松创建自己的动画,这样便可以制作自定义动画。这些自定义的动画获得了标准动画类的许多性能优点。WPF属性动画系统如果了解关于计时系统的一些重要概念,则在使用WPF时可能会更加轻松一些。最重要的是,在WPF中,通过对对象的个别属性应用动画,可以对对象进行动画处理。例如,若要使框架元素增大,请对其Width和Height属性进行动画处理。若要使对象逐渐从视野中消失,可以对其Opacity属性进行动画处理。要使属性具有动画功能,属性必须满足以下三个要求:它必须是依赖项属性。它必须属于继承自DependencyObject并实现IAnimatable接口的类。必须存在可用的兼容动画类型.WPF包含许多具有动画属性的对象。诸如Button、TabControl和Panel控件以及Shape对象都继承自DependencyObject。它们的大多数属性都是依赖项属性。您几乎可以在任何地方使用动画,包括在样式和控件模板中使用。动画未必可见;对于不属于用户界面的对象,只要它们满足本节中所述的条件,便可以对其进行动画处理。示例:使元素逐渐进入视野并从视野中逐渐消失此示例演示如何使用WPF动画对依赖项属性的值进行动画处理。本示例使用DoubleAnimation(一种生成Double值的动画类型)对Rectangle的Opacity属性进行动画处理。因此,Rectangle将逐渐进入视野并逐渐从视野中消失。示例的第一部分创建一个Rectangle元素,并将其显示在Page中。下面的步骤表明如何创建动画并将其应用于矩形的Opacity属性。第1部分:创建DoubleAnimation使元素逐渐进入视野并逐渐从视野中消失的一种方法是对其Opacity属性进行动画处理。由于Opacity属性的类型是Double,因此需要一个产生双精度值的动画。DoubleAnimation就是这样的一个动画。DoubleAnimation创建两个双精度值之间的过渡。若要指定其起始值,可设置其From属性。若要指定其终止值,可设置其To属性。不透明度值1.0使对象完全不透明,不透明度值0.0使对象完全不可见。若要使动画的不透明度值从1.0过渡为0.0,可以将其From属性设置为1.0,将其To属性设置为0.0。[C#]然后,必须指定Duration。动画的Duration指定了从其起始值过渡为目标值所需的时间。在下面的示例中,为动画指定的持续时间为五秒钟。上面的代码显示了不透明度值从1.0向0.0转换的动画,此转换使目标元素从完全不透明逐渐转变为完全不可见。若要使元素在消失后再逐渐回到视野中,请将动画的AutoReverse属性设置为true。若要使动画无限期地重复,请将其RepeatBehavior属性设置为Forever。第2部分:创建演示图板若要向对象应用动画,请创建Storyboard并使用TargetName和TargetProperty附加属性指定要进行动画处理的对象和属性。创建Storyboard并将动画添加为其子项。在代码中,将Storyboard声明为类成员。然后初始化Storyboard并将动画添加为其子项。必须知道要在哪里应用动画。使用Storyboard..::.TargetName附加属性指定要进行动画处理的对象。在下面的代码中,为DoubleAnimation指定了一个目标名称MyRectangle,这是要进行动画处理的对象的名称。说明:在代码中创建演示图板时,必须执行两个附加步骤:创建名称范围以及注册要进行动画处理的对象的名称。本节开头的代码创建了页面和矩形,还声明了NameScope并注册了矩形的名称。如果还没有NameScope,则可以使用SetNameScope方法创建一个。您可以使用RegisterName方法向为其创建了NameScope的元素注册目标对象的名称。否则,Storyboard无法找到要进行动画处理的对象。使用TargetProperty附加属性指定要进行动画处理的属性。在下面的代码中,动画被配置为面向Rectangle的Opacity属性。第3部分(XAML):将演示图板与触发器关联在XAML中应用和启动Storyboard的最简单的方法是使用事件触发器。创建一个BeginStoryboard对象并将演示图板与其关联。BeginStoryboard是一种应用和启动Storyboard的TriggerAction。创建EventTrigger并将BeginStoryboard添加至其Actions集合。将EventTrigger的RoutedEvent属性设置为启动Storyboard所需的路由事件。将EventTrigger添加至矩形的Triggers集合。第3部分(代码):将演示图板与事件处理程序关联在代码中应用和启动Storyboard的最简单的方法是使用事件处理程序。注册矩形的Loaded事件。[C#]声明事件处理程序。在事件处理程序中,使用Begin方法来应用演示图板。[C#]完整的示例下面的示例演示了一段完整代码,这段代码用于创建逐渐进入视野并从视野中逐渐消失的矩形。动画类型由于动画生成属性值,因此对于不同的属性类型,会有不同的动画类型。若要对采用Double的属性(例如元素的Width属性)进行动画处理,请使用生成Double值的动画。若要对采用Point的属性进行动画处理,请使用生成Point值的动画,依此类推。由于存在许多不同的属性类型,因此System.Windows.Media.Animation命名空间中存在一些动画类。幸好它们都遵循严格的命名约定,因此可以轻松地区分它们:类型Animation这些动画称为“From/To/By”或“基本”动画,它们在起始值和目标值之间进行动画处理,或者通过将偏移量值与其起始值相加来进行动画处理。若要指定起始值,请设置动画的“From”属性。若要指定终止值,请设置动画的“To”属性。若要指定偏移量值,请设置动画的“By”属性。此概述中的示例使用这些动画,因为这些动画使用起来最简单。From/To/By动画概述中详细描述了“From/To/By”动画。类型AnimationUsingKeyFrames关键帧动画的功能比“From/To/By”动画的功能更强大,因为您可以指定任意多个目标值,甚至可以控制它们的插值方法。某些类型的内容只能用关键帧动画进行动画处理。关键帧动画概述中详细描述了关键帧动画。类型AnimationUsingPath路径动画使您能够使用几何路径来生成动画值。类型AnimationBase在实现时对类型值进行动画处理的抽象类。此类用作类型Animation和类型AnimationUsingKeyFrames类的基类。只有在想要创建自己的自定义动画时,才必须直接处理这些类。否则,请使用类型Animation或KeyFrame类型Animation。在大多数情况下,您将需要使用类型Animation类,例如DoubleAnimation和ColorAnimation。下表显示了一些常用动画类型以及与这些类型一起使用的一些属性。动画是时间线所有动画类型均继承自Timeline类,因此所有动画都是专用类型的时间线。Timeline定义时间段。您可以指定时间线的以下计时行为:其Duration和重复次数,甚至可以为时间线指定时间走得多快。因为动画是Timeline,所以它还表示一个时间段。在动画的指定时间段(即Duration)内运行动画时,动画还会计算输出值。在运行或“播放”动画时,动画将更新与其关联的属性。Duration、AutoReverse和RepeatBehavior是三个常用的计时属性。Duration属性如前文所述,时间线代表一个时间段。该时间段的长度由时间线的Duration(通常用TimeSpan值来指定)来决定。当时间线达到其持续时间的终点时,表示时间线完成了一次重复。动画使用其Duration属性来确定其当前值。如果没有为动画指定Duration值,它将使用默认值(1秒)。下面的语法显示了Duration属性(Property)的可扩展应用程序标记语言(XAML)属性(Attribute)语法的简化版本。下表显示了一些Duration设置及其结果值。在代码中指定Duration的一种方法是使用FromSeconds方法创建TimeSpan,然后使用该TimeSpan声明新的Duration结构。AutoReverseAutoReverse属性指定时间线在到达其Duration的终点后是否倒退。如果将此动画属性设置为true,则动画在到达其Duration的终点后将倒退,即从其终止值向其起始值反向播放。默认情况下,该属性为false。RepeatBehaviorRepeatBehavior属性指定时间线的播放次数。默认情况下,时间线的重复次数为1.0,即播放一次时间线,根本不进行重复。对属性应用动画前面几节描述动画的不同类型及其计时属性。本节演示如何对要进行动画处理的属性应用动画。Storyboard对象提供了对属性应用动画的一种方法。Storyboard是一个为其所包含的动画提供目标信息的容器时间线。以对象和属性为目标Storyboard类提供TargetName和TargetProperty附加属性。通过在动画上设置这些属性,您将告诉动画对哪些内容进行动画处理。但是,通常必须为对象提供一个名称,动画才能以该对象作为处理目标。为FrameworkElement分配名称不同于为Freezable对象分配名称。大多数控件和面板是框架元素;而大多数纯图形对象(如画笔、转换和几何图形)是可冻结的对象。若要使FrameworkElement成为动画目标,应通过设置其Name属性为其提供一个名称。在代码中,还必须使用RegisterName方法向元素名称所属的页面注册该元素名称。要使用XAML使Freezable对象成为目标,应使用x:Name属性为其分配一个名称。在代码中,只需使用RegisterName方法向对象所属的页面注册该对象。下面几节举例说明如何使用XAML和代码为元素命名。应用和启动演示图板若要使用XAML启动演示图板,应将其与EventTrigger关联。EventTrigger是一个描述在发生指定事件
本文标题:WPF动画教程
链接地址:https://www.777doc.com/doc-4237894 .html