Frage

Was ist der richtige Weg, ein Storyboard von .net Code zu beenden und neu starten?

Ich versuche, ...

myStory.Stop(this);

Erwartung, dass ein nachfolgender Aufruf von .BEGIN (this); neu starten würde von der Timeline bei Null, sondern zieht das Drehbuch genau dort, wo sie gestoppt wurde.

Ich habe versucht,

.Remove(this);

und ich versuchte,

.Seek(TimeSpan.Zero); 

das auch nicht funktioniert hat.

Mehr Details ... Hier ist mein Drehbuch Probe.

<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>

So der Text in der Textone läuft, und wenn man den Bildschirm zu schließen, und schnell wieder auf den Bildschirm, die texttwo spielt tatsächlich über eine neu gestartete Storyboard. So das Original (aus dem ersten Bildschirm) Storyboard ist noch herum und spielt, auch wenn ich entfernt haben, und hielt es.

War es hilfreich?

Lösung

Was ist mit Storyboard.Seek (TimeSpan.Zero)? Ähnlich wie in einem Strom zu suchen, diese sollten Sie zu Beginn der Animation bringen.

, bemerkte ich, dass Sie auch sicherstellen sollen, dass die IsControllable Eigenschaft auf true gesetzt ist. Denken Sie daran!

Storyboard.Seek Methode

Andere Tipps

Sie müssten myStory.Remove (diese) vor dem Aufruf myStory.Begin (diese) tun, um es von Grund auf neu anfangen zu müssen. Dies liegt daran, ruft Storyboard :: Stopp nur die Animationsuhren stoppt, sondern lässt sie intakt. Ein nachfolgender Aufruf von Begin, wird einfach als Lebenslauf handeln. Ich bin damit einverstanden, dass dies etwas eingängig ist, aber wenn Sie in der Dokumentation ClockController :: Stopp , werden Sie die folgenden in den Erläuterungen siehe:

  

Diese Methode ändert das Ziel Uhr des   Aktuellerstatus zu Gestoppt.

     

Eine stehengebliebene Uhr kann wieder gestartet werden   mit der Begin, Sucht, oder   SeekAlignedToLastTick Verfahren.

Leider Scott, ich habe nicht aufgepasst. Haben Sie versucht, die FillBehavior auf dem Storyboard zu setzen. Stellen Sie die FillBehavior auf Halten Sie die Animation zurücksetzt. Nicht sicher, warum Stopp es nicht, obwohl tun ...

<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;

dann neue Storyboard erstellen

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

das Storyboard "storyboard_name" wird gestartet.

Wenn Sie möchten, wie dies die storyboard.please versuchen zu stoppen

storyboard_name.Stop();

, wenn Sie die storyboard.please zu entfernen, wie dies versuchen

storyboard_name.Remove();

weitere Details können sein:

this.MyAnimation.FillBehavior = FillBehavior.Stop;

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top