Neustarten eines WPF Storyboard
-
07-07-2019 - |
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.
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!
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;