<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Microsoft.Samples.KeyFrameAnimations.KeyFramesIntroduction"
WindowTitle="KeyFrame Animations">
<Border Width="400" BorderBrush="Black">
<Rectangle Fill="Blue"
Width="50" Height="50"
HorizontalAlignment="Left">
<Rectangle.RenderTransform>
<TranslateTransform
x:Name="MyAnimatedTranslateTransform"
X="0" Y="0" />
</Rectangle.RenderTransform>
<Rectangle.Triggers>
<EventTrigger RoutedEvent="Rectangle.MouseLeftButtonDown">
<BeginStoryboard>
<Storyboard>
<!-- Animate the TranslateTransform's X property
from 0 to 350, then 50,
then 200 over 10 seconds. -->
<DoubleAnimationUsingKeyFrames
Storyboard.TargetName="MyAnimatedTranslateTransform"
Storyboard.TargetProperty="X"
Duration="0:0:10">
<LinearDoubleKeyFrame Value="0" KeyTime="0:0:0" />
<LinearDoubleKeyFrame Value="350" KeyTime="0:0:2" />
<LinearDoubleKeyFrame Value="50" KeyTime="0:0:7" />
<LinearDoubleKeyFrame Value="200" KeyTime="0:0:8" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Rectangle.Triggers>
</Rectangle>
</Border>
</Page>
前面部分提到了某些关键帧动画支持多种内插方法。动画的内插对动画在其持续时间内在值之间进行过渡的方式进行了描述。通过选择您的动画将要使用哪种关键帧类型,您可以定义该关键帧段的内插方法。有三种类型的内插方法:线性、离散和样条。
线性内插
使用线性内插,动画将以段持续期间内的固定速度来播放。例如,如果关键帧段从 0 过渡到 10,持续期间为 5 秒,则动画会在指定时间输出以下值:
时间 |
输出值 |
---|---|
0 |
0 |
1 |
2 |
2 |
4 |
3 |
6 |
4 |
8 |
4.25 |
8.5 |
4.5 |
9 |
5 |
10 |
离散内插
使用离散内插,动画函数将从一个值跳到下一个没有内插的值。如果关键帧段从 0 过渡到 10,持续期间为 5 秒,则动画会在指定时间输出以下值:
时间 |
输出值 |
---|---|
0 |
0 |
1 |
0 |
2 |
0 |
3 |
0 |
4 |
0 |
4.25 |
0 |
4.5 |
0 |
5 |
10 |
请注意,动画在段持续期间恰好结束之前不会更改其输出值。
样条内插更为复杂。有关内容将在下一部分介绍。
样条内插
样条内插可用于达到更现实的计时效果。由于动画通常用于模拟现实世界中发生的效果,因此开发人员可能需要精确地控制对象的加速和减速,并需要严格地对计时段进行操作。通过样条关键帧,您可以使用样条内插进行动画处理。使用其他关键帧,您可以指定一个 Value 和 KeyTime。 使用样条关键帧,您还可以指定一个 KeySpline。 下面的示例演示 DoubleAnimationUsingKeyFrames 的单个样条关键帧。 请注意 KeySpline 属性,它正是样条关键帧与其他类型的关键帧的不同之处。