次の方法で共有


タイミング挙動の概要

このトピックでは、アニメーションやその他の 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 回後方に再生します。 DurationAutoReverse
アクティブ期間 タイムラインが RepeatBehavior プロパティで指定されたすべての繰り返しを完了するまでにかかる時間。 DurationAutoReverseRepeatBehavior

持続時間プロパティ

前述のように、タイムラインは時間のセグメントを表します。 そのセグメントの長さは、タイムラインの Durationによって決まります。 タイムラインが継続時間の終了に達すると、再生が停止します。 タイムラインに子タイムラインがある場合は、再生も停止します。 アニメーションの場合、 Duration はアニメーションの開始値から終了値への切り替えに要する時間を指定します。 タイムラインの期間は、1 回の反復の 継続時間とアニメーションが再生する時間の合計 (繰り返しを含む) を区別するために、単純な継続時間と呼ばれることもあります。 期間は、有限の時間値または特殊な値 Automatic または Foreverを使用して指定できます。 アニメーションの継続時間は TimeSpan 値に解決されるため、値間を遷移させることができます。

次の例は、5秒間のDoubleAnimationを持つDurationを示しています。

<DoubleAnimation 
  Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
  From="0" To="100" Duration="0:0:5"  />

StoryboardParallelTimelineなどのコンテナータイムラインには、既定の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>

コンテナータイムラインの DurationTimeSpan 値に設定することで、子 Timeline オブジェクトが再生するよりも長くまたは短く再生するように強制できます。 Durationをコンテナー タイムラインの子Timeline オブジェクトの長さよりも小さい値に設定すると、コンテナー タイムラインの実行時に子Timeline オブジェクトの再生が停止します。 次の例では、前の例のDurationStoryboardを 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 プロパティ

RepeatBehaviorTimeline プロパティは、単純な期間を繰り返す回数を制御します。 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" />

RepeatBehaviorTimelineプロパティをForeverに設定すると、Timelineは対話形式で、またはタイミング システムによって停止するまで繰り返されます。 次の例では、 RepeatBehavior プロパティを使用して、 DoubleAnimation を無期限に再生します。

<DoubleAnimation 
  Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
  From="0" To="100" Duration="0:0:5" 
  RepeatBehavior="Forever" />

その他の例については、「 アニメーションを繰り返す」を参照してください。

AutoReverse プロパティ

AutoReverse プロパティは、各前方反復の終了時にTimelineを後方に再生するかどうかを指定します。 次の例では、AutoReverseDoubleAnimation プロパティを true に設定します。その結果、0 から 100、100 から 0 にアニメーション化されます。 合計 10 秒間再生されます。

<DoubleAnimation 
  Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
  From="0" To="100" Duration="0:0:5" 
  AutoReverse="True" />

Count値を使用してRepeatBehaviorTimelineを指定し、そのAutoReverseTimelineプロパティをtrueする場合、1 回の繰り返しは 1 回の前方反復と 1 回の後方反復で構成されます。 次の例では、前の例のRepeatBehaviorDoubleAnimationを 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 番目のBeginTimeDoubleAnimationを 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オブジェクトも、WidthRectangleを 0 から 100 にアニメーション化します。 Rectangle要素には、アニメーション化されていないWidth値が 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 つのプロパティが用意されています。

こちらも参照ください