このトピックでは、アニメーションやその他の Timeline オブジェクトのタイミング動作について説明します。
[前提条件]
このトピックを理解するには、基本的なアニメーション機能について理解している必要があります。 詳細については、「 アニメーションの概要」を参照してください。
タイムラインの種類
Timelineは時間のセグメントを表します。 このプロパティを使用すると、そのセグメントの長さ、開始するタイミング、繰り返す回数、そのセグメントでの時間の進行状況などを指定できます。
タイムライン クラスから継承するクラスは、アニメーションやメディア再生などの追加機能を提供します。 WPF には、次の Timeline 型が用意されています。
タイムラインの種類 | 説明 |
---|---|
AnimationTimeline | プロパティをアニメーション化するための出力値を生成する Timeline オブジェクトの抽象基本クラス。 |
MediaTimeline | メディア ファイルから出力を生成します。 |
ParallelTimeline | 子TimelineGroup オブジェクトをグループ化および制御するTimelineの種類。 |
Storyboard | 含まれる Timeline オブジェクトのターゲット情報を提供する ParallelTimeline の種類。 |
Timeline | タイミング動作を定義する抽象基本クラス。 |
TimelineGroup | 他のTimeline オブジェクトを含めることができるTimeline オブジェクトの抽象クラス。 |
タイムラインの長さを制御するプロパティ
Timelineは時間のセグメントを表し、タイムラインの長さはさまざまな方法で記述できます。 次の表では、タイムラインの長さを説明するいくつかの用語を定義します。
任期 | 説明 | 特性 |
---|---|---|
単純な期間 | タイムラインが 1 回の前方反復に要する時間の長さ。 | Duration |
1 回の繰り返し | タイムラインが 1 回再生されるまでの時間の長さ。 AutoReverse プロパティが true の場合は、1 回後方に再生します。 | Duration、AutoReverse |
アクティブ期間 | タイムラインが RepeatBehavior プロパティで指定されたすべての繰り返しを完了するまでにかかる時間。 | Duration、 AutoReverse、 RepeatBehavior |
持続時間プロパティ
前述のように、タイムラインは時間のセグメントを表します。 そのセグメントの長さは、タイムラインの Durationによって決まります。 タイムラインが継続時間の終了に達すると、再生が停止します。 タイムラインに子タイムラインがある場合は、再生も停止します。 アニメーションの場合、 Duration はアニメーションの開始値から終了値への切り替えに要する時間を指定します。 タイムラインの期間は、1 回の反復の 継続時間とアニメーションが再生する時間の合計 (繰り返しを含む) を区別するために、単純な継続時間と呼ばれることもあります。 期間は、有限の時間値または特殊な値 Automatic または Foreverを使用して指定できます。 アニメーションの継続時間は TimeSpan 値に解決されるため、値間を遷移させることができます。
次の例は、5秒間のDoubleAnimationを持つDurationを示しています。
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5" />
StoryboardやParallelTimelineなどのコンテナータイムラインには、既定のAutomatic期間があります。つまり、最後の子が再生を停止すると自動的に終了します。 次の例では、Storyboard が 5 秒に解決される Duration を示しています。これは、すべての子 DoubleAnimation オブジェクトが完了するのにかかる時間です。
<Storyboard >
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5" />
<DoubleAnimation
Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:3" />
</Storyboard>
コンテナータイムラインの Duration を TimeSpan 値に設定することで、子 Timeline オブジェクトが再生するよりも長くまたは短く再生するように強制できます。 Durationをコンテナー タイムラインの子Timeline オブジェクトの長さよりも小さい値に設定すると、コンテナー タイムラインの実行時に子Timeline オブジェクトの再生が停止します。 次の例では、前の例のDurationのStoryboardを 3 秒に設定します。 その結果、最初の DoubleAnimation は、ターゲットの四角形の幅を 60 にアニメーション化すると、3 秒後に進行を停止します。
<Storyboard Duration="0:0:3">
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5" />
<DoubleAnimation
Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:3" />
</Storyboard>
RepeatBehavior プロパティ
RepeatBehaviorの Timeline プロパティは、単純な期間を繰り返す回数を制御します。
RepeatBehavior プロパティを使用すると、タイムラインの再生回数 (反復Count) または再生する合計時間 (繰り返しDuration) を指定できます。 どちらの場合も、アニメーションは必要な数の開始から終了まで実行され、要求されたカウントまたは期間を満たします。 既定では、タイムラインには 1.0
の反復回数があります。つまり、1 回再生され、まったく繰り返されません。
次の例では、 RepeatBehavior プロパティを使用して、反復回数を指定して、単純な期間の 2 倍の DoubleAnimation プレイを行います。
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
RepeatBehavior="2x" />
次の例では、 RepeatBehavior プロパティを使用して、単純な期間の半分の DoubleAnimation を再生します。
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
RepeatBehavior="0.5x" />
RepeatBehaviorのTimelineプロパティをForeverに設定すると、Timelineは対話形式で、またはタイミング システムによって停止するまで繰り返されます。 次の例では、 RepeatBehavior プロパティを使用して、 DoubleAnimation を無期限に再生します。
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
RepeatBehavior="Forever" />
その他の例については、「 アニメーションを繰り返す」を参照してください。
AutoReverse プロパティ
AutoReverse プロパティは、各前方反復の終了時にTimelineを後方に再生するかどうかを指定します。 次の例では、AutoReverseのDoubleAnimation プロパティを true
に設定します。その結果、0 から 100、100 から 0 にアニメーション化されます。 合計 10 秒間再生されます。
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
AutoReverse="True" />
Count値を使用してRepeatBehaviorのTimelineを指定し、そのAutoReverseのTimelineプロパティをtrue
する場合、1 回の繰り返しは 1 回の前方反復と 1 回の後方反復で構成されます。 次の例では、前の例のRepeatBehaviorのDoubleAnimationを 2 のCountに設定します。 その結果、DoubleAnimation は 20 秒間再生されます。5 秒間前方に再生された後、5 秒間後方に再生され、再び5秒間前方に再生されてから、最後に5秒間後方に再生されます。
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
RepeatBehavior="2"
AutoReverse="True" />
コンテナー タイムラインに子 Timeline オブジェクトがある場合、コンテナー タイムラインの場合は反転します。 その他の例については、「 タイムラインを自動的に反転させるかどうかを指定する」を参照してください。
BeginTime プロパティ
BeginTime プロパティを使用すると、タイムラインを開始するタイミングを指定できます。 タイムラインの開始時刻は、親タイムラインに対して相対的です。 開始時刻が 0 秒の場合、タイムラインは親が開始するとすぐに開始されます。その他の値を指定すると、親タイムラインの再生が開始されたときと子タイムラインが再生されたときの間のオフセットが作成されます。 たとえば、開始時刻が 2 秒の場合は、親が 2 秒の時間に達したときにタイムラインの再生が開始されます。 既定では、すべてのタイムラインの開始時刻は 0 秒です。 タイムラインの開始時刻を null
に設定して、タイムラインを開始できないようにすることもできます。 WPF では、 x:Null マークアップ拡張を使用して null を指定します。
タイムラインの RepeatBehavior 設定により、タイムラインが繰り返されるたびに開始時刻は適用されないことに注意してください。 BeginTimeが 10 秒でRepeatBehaviorForeverのアニメーションを作成する場合、アニメーションが初めて再生されるまでに 10 秒の遅延が発生しますが、連続する繰り返しごとには遅延しません。 ただし、アニメーションの親タイムラインを再起動または繰り返す場合は、10 秒の遅延が発生します。
BeginTime プロパティは、タイムラインをずらす場合に便利です。 次の例では、2 つの子Storyboard オブジェクトを持つDoubleAnimationを作成します。 最初のアニメーションの Duration は 5 秒で、2 番目のアニメーションの Duration は 3 秒です。 この例では、2 番目のBeginTimeのDoubleAnimationを 5 秒に設定して、最初のDoubleAnimationが終了した後に再生を開始します。
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
BeginTime="0:0:0" />
<DoubleAnimation
Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:3"
BeginTime="0:0:5" />
</Storyboard>
FillBehavior プロパティ
Timelineがアクティブな合計期間の終わりに達すると、FillBehavior プロパティは、最後の値を停止するか保持するかを指定します。 FillBehavior HoldEndが出力値を "保持" しているアニメーション: アニメーション化されるプロパティは、アニメーションの最後の値を保持します。 Stop値を指定すると、アニメーションが終了した後にターゲット プロパティへの影響が停止します。
次の例では、2 つの子Storyboard オブジェクトを持つDoubleAnimationを作成します。 どちらのDoubleAnimationオブジェクトも、WidthのRectangleを 0 から 100 にアニメーション化します。 Rectangle要素には、アニメーション化されていないWidth値が 500 [デバイスに依存しないピクセル] があります。
最初のFillBehaviorのDoubleAnimation プロパティは既定値の HoldEnd に設定されます。 その結果、四角形の幅は、 DoubleAnimation が終了した後も 100 のままです。
2 番目のFillBehaviorの DoubleAnimation プロパティは、Stopに設定されます。 その結果、2 番目のWidthのRectangleは、DoubleAnimationが終了すると 500 に戻ります。
<Rectangle Name="MyRectangle"
Width="500" Height="100"
Opacity="1" Fill="Red">
</Rectangle>
<Rectangle Name="MyOtherRectangle"
Width="500" Height="100"
Opacity="1" Fill="Orange">
</Rectangle>
<Button Content="Start FillBehavior Example">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
FillBehavior="HoldEnd" />
<DoubleAnimation
Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
FillBehavior="Stop" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
タイムラインの速度を制御するプロパティ
Timeline クラスには、速度を指定するための 3 つのプロパティが用意されています。
SpeedRatio – 親を基準としてTimelineの時間進行の相対速度を指定します。 1 より大きい値を指定すると、 Timeline とその子 Timeline オブジェクトの速度が上がります。値が 0 から 1 の間では速度が低下します。 値 1 は、 Timeline が親と同じ速度で進行することを示します。 コンテナー タイムラインの SpeedRatio 設定は、すべての子 Timeline オブジェクトにも影響します。
AccelerationRatio – 加速に費やされたタイムラインの Duration の割合を指定します。 例については、「 方法: アニメーションを加速または減速する」を参照してください。
DecelerationRatio - 減速に費やされたタイムラインの Duration の割合を指定します。 例については、「 方法: アニメーションを加速または減速する」を参照してください。
こちらも参照ください
.NET Desktop feedback