WPF 属性动画系统
若要使属性具有动画功能,属性必须满足以下三个要求:
-
它必须是依赖属性。
-
它必须属于继承的类DependencyObject并实现IAnimatable接口。
-
必须存在可用的兼容动画类型。
创建步骤:(1)根据想改动的属性类型=》动画类型。如修改透明度 Opacity属性属于类型Double=》DoubleAnimation;
(2)Duration动画的指定从其起始值转到其目标值所需的时间长度。Duration="0:0:5"
(3)AutoReverse="True" RepeatBehavior="Forever" 属性
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyRectangle"
Storyboard.TargetProperty="Opacity"
From="1.0" To="0.0" Duration="0:0:5"
AutoReverse="True" RepeatBehavior="Forever" />
</Storyboard>
创建启动动画对象和触发机制
<EventTrigger RoutedEvent="Rectangle.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyRectangle"
Storyboard.TargetProperty="Opacity"
From="1.0" To="0.0" Duration="0:0:5"
AutoReverse="True" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
在某个控件中实现
<Rectangle
Name="MyRectangle"
Width="100"
Height="100"
Fill="Blue">
<Rectangle.Triggers>
<!-- Animates the rectangle's opacity. -->
<EventTrigger RoutedEvent="Rectangle.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyRectangle"
Storyboard.TargetProperty="Opacity"
From="1.0" To="0.0" Duration="0:0:5"
AutoReverse="True" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Rectangle.Triggers>
</Rectangle>
最后一个步骤:后台注册load 事件
应用和启动的最简单办法Storyboard在代码中是使用事件处理程序。 本部分演示如何将相关联Storyboard与代码中的事件处理程序。
注册Loaded矩形的事件。
myRectangle.Loaded += new RoutedEventHandler(myRectangleLoaded);
声明事件处理程序。 在事件处理程序,使用Begin方法来应用演示图板。
private void myRectangleLoaded(object sender, RoutedEventArgs e)
{
myStoryboard.Begin(this);
}
动画类型
由于动画生成属性值,因此不同的属性类型具有不同的动画类型。 若要对采用的属性进行动画处理Double,如Width属性的元素,使用生成的动画,Double值。 若要对采用的属性进行动画处理Point,使用生成的动画,Point值,等等。 由于存在许多不同的属性类型,有一些动画类中的System.Windows.Media.Animation命名空间。 它们都遵循严格的命名约定,因此可以轻松地区分它们:
-
<类型> 动画
这些动画称为“From/To/By”或“基本”动画,它们在起始值和目标值之间进行动画处理,或者通过将偏移量值与其起始值相加来进行动画处理
-
<类型> AnimationUsingKeyFrames
关键帧动画的功能比“From/To/By”动画的功能更强大,因为可以指定任意多个目标值,甚至可以控制它们的插值方法。 某些类型只能用关键帧动画进行动画处理。
-
<类型> AnimationUsingPath
路径动画支持使用几何路径来生成动画值。
-
<类型> AnimationBase
抽象类在实现时进行动画处理<类型> 值。 此类用作类的基类<类型> 动画并<类型> AnimationUsingKeyFrames 类。 只有在想要创建自己的自定义动画时,才需要直接处理这些类。 否则,请使用<类型> 动画或关键帧<类型> 动画。
在大多数情况下,你将想要使用<类型> 动画类,如DoubleAnimation和ColorAnimation。
下表显示了一些常用动画类型以及一些与这些类型一起使用的属性。
属性类型 | 对应的基本 (From/To/By) 动画 | 对应的关键帧动画 | 对应的路径动画 | 用法示例 |
---|---|---|---|---|
Color | ColorAnimation | ColorAnimationUsingKeyFrames | 无 | 进行动画处理Color的SolidColorBrush或GradientStop。 |
Double | DoubleAnimation | DoubleAnimationUsingKeyFrames | DoubleAnimationUsingPath | 进行动画处理Width的DockPanel或Height的Button。 |
Point | PointAnimation | PointAnimationUsingKeyFrames | PointAnimationUsingPath | 进行动画处理Center位置EllipseGeometry。 |
String | 无 | StringAnimationUsingKeyFrames | 无 | 进行动画处理Text的TextBlock或Content的Button。 |
动画是时间线
所有动画类型均都继承自Timeline类; 因此,所有动画都是专用的类型的时间线。
这三个常用的计时属性Duration, AutoReverse,和RepeatBehavior。