2009-05-07 11 views
8

.netコードからストーリーボードを停止して再起動する適切な方法は何ですか?WPFストーリーボードの再起動

私は

myStory.Stop(this); 

は.Begin(この)への後続の呼び出しを期待...しようとしています。タイムラインからゼロで再開するのではなく、ストーリーボードが停止したところでストーリーボードをピックアップします。

私は

.Remove(this); 

を試してみましたし、私もうまくいきませんでした

.Seek(TimeSpan.Zero); 

を試してみました。

詳細...ここに私のストーリーボードのサンプルです。

<Storyboard x:Key="overlay"> 
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textone" Storyboard.TargetProperty="(UIElement.Opacity)"> 
     <SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="0"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="1"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="1"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="0"/> 
    </DoubleAnimationUsingKeyFrames> 
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="texttwo" Storyboard.TargetProperty="(UIElement.Opacity)"> 
     <SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="0"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="1"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="1"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="0"/> 
    </DoubleAnimationUsingKeyFrames> 
</Storyboard> 

のでtextoneのテキストが実行され、あなたは、画面を閉じて、そしてすぐに画面に戻る場合は、texttwoは、実際に新しく開始されたストーリーボードの上に果たしています。元の(最初の画面からの)ストーリーボードは、私が削除しても、まだ周りにいて演奏されていて、止めました。

+0

多分それは私のセットアップです。もう少し詳しい情報があります。私はstoryOverlayストーリーボードのプロパティを持つbaseclassを持っています。子クラスのctorで、私はストーリーボードとしてstoryOverlay = TryFindResource( "storyId")を行います。 それから、storyOVerlay!= nullであるかどうかを確認しています。 {storyOverlay.Remove(this); } これは何も変わりませんか? – ScottCate

答えて

8

Storyboard.Seek(TimeSpan.Zero)の使用についてはどうですか?ストリームでシークするのと同じように、これはアニメーションの先頭に戻ります。

私は、IsControllableプロパティがtrueに設定されていることも確認する必要があるとコメントしました。心に留めておきます!

Storyboard.Seek method

+0

また、IsControllableがtrueに設定され、適切なオブジェクトがマークされていることを確認する必要があります。 – Rob

+0

ありがとうございます!これは私が最後にやったことです! – ScottCate

3

myStory.Begin(this)を呼び出す前に、myStory.Remove(this)を実行して最初からやり直す必要があります。これは、Storyboard :: Stopを呼び出すとアニメーションクロックが停止するだけですが、元のままになります。その後のBeginの呼び出しは、単にレジュームとして機能します。私はあなたがドキュメントClockController::Stopを読めばしかし、あなたは備考欄に次のように表示されます、これはやや直感に反することに同意します:

この方法は、停止にターゲットクロックの currentStateのを変更します。

停止クロックは、Begin、Seek、または SeekAlignedToLastTickメソッドを使用して によって再開することができます。

+0

私のことを右に聞こえます。 –

+0

これはまだ私のために働いていません。私がmyStory.RemoveとmyStory.Stopの両方を行った後、シーンが画面に戻ってきたら、ストーリーボードが終了する前に、最後のストーリーボードが再生されています。 – ScottCate

0

スコット申し訳ありませんが、私は注意を払っていませんでした。ストーリーボードにFillBehaviorを設定しようとしましたか? FillBehaviorをStopに設定すると、アニメーションがリセットされます。なぜ停止はしかし、それをしない...

0
<Storyboard x:Key="overlay"> 
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textone" Storyboard.TargetProperty="(UIElement.Opacity)"> 
    <SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="0"/> 
    <SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="1"/> 
    <SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="1"/> 
    <SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="0"/> 
</DoubleAnimationUsingKeyFrames> 
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="texttwo" Storyboard.TargetProperty="(UIElement.Opacity)"> 
    <SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="0"/> 
    <SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="1"/> 
    <SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="1"/> 
    <SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="0"/> 
</DoubleAnimationUsingKeyFrames> 

using System.Windows.Media.Animation; 

わからないから、新しいストーリーボードを作成

Storyboard storyboard_name = (Storyboard)(FindResource("overlay")); 
storyboard_name.Begin(); 

ストーリーボード "storyboard_name" を開始します。

ストーリーボードを停止する場合は、あなたは

storyboard_name.Remove(); 
-1

その他の詳細は、することができ、このようにしてみてくださいstoryboard.pleaseを削除したい場合は、この

storyboard_name.Stop(); 

のようにしてみてください。

this.MyAnimation.FillBehavior = FillBehavior.Stop。

関連する問題