8

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

私はしようとしています ...

myStory.Stop(this);

.Begin(this);への後続の呼び出しを期待します。タイムラインからゼロで再開しますが、代わりに、ストーリーボードは停止した場所から再開します。

私が試してみました

.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は実際に新しく開始されたストーリーボードで再生されます。そのため、元の(最初の画面からの)ストーリーボードは、削除して停止したにもかかわらず、まだ再生されています。

4

5 に答える 5

11

Storyboard.Seek(TimeSpan.Zero) の使用はどうですか? ストリームのシークと同様に、これによりアニメーションの最初に戻るはずです。

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

Storyboard.Seek メソッド

于 2009-05-07T20:57:17.887 に答える
3

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

このメソッドは、ターゲット クロックの CurrentState を Stopped に変更します。

停止したクロックは、Begin、Seek、または SeekAlignedToLastTick メソッドを使用して再開できます。

于 2009-05-07T01:06:40.150 に答える
0

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

于 2009-05-26T20:23:20.330 に答える
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.Stop();

ストーリーボードを削除したい場合は、このようにしてみてください

storyboard_name.Remove();
于 2012-06-04T04:22:39.307 に答える