Frage

Ich habe so etwas:

barProgress.BeginAnimation(RangeBase.ValueProperty, new DoubleAnimation(
    barProgress.Value, dNextProgressValue,
    new Duration(TimeSpan.FromSeconds(dDuration)));

Nun, wie würden Sie diese Animation stoppen (die DoubleAnimation)?Der Grund, warum ich das tun möchte, ist, dass ich neue Animationen starten möchte (das scheint zu funktionieren, ist aber schwer zu sagen) und schließlich die letzte Animation stoppen möchte ...

War es hilfreich?

Lösung

Um es zu stoppen, rufen Sie an BeginAnimation wieder mit dem zweiten Argument auf gesetzt null.

Andere Tipps

Wenn Sie Storyboards zur Steuerung einer Animation verwenden, stellen Sie sicher, dass Sie den zweiten Parameter auf „true“ setzen, um die Animation als steuerbar festzulegen:

public void Begin(
    FrameworkContentElement containingObject,
    **bool isControllable**
)

Es gibt zwei Möglichkeiten, eine BeginAnimation zu stoppen.Die erste besteht darin, BeginAnimation erneut aufzurufen, wobei der zweite Parameter auf null gesetzt ist.Dadurch werden alle Animationen auf dem Grundstück entfernt und zurückkehren den Wert auf seinen Grundwert zurück.

Je nachdem, wie Sie diesen Wert verwenden, ist dies möglicherweise nicht das gewünschte Verhalten.Die zweite Möglichkeit besteht darin, die BeginTime der Animationen auf null zu setzen und dann BeginAnimation damit aufzurufen.Dadurch wird diese spezifische Animation entfernt und der Wert an seiner aktuellen Position belassen.

DoubleAnimation myAnimation = new Animation();
// Initialize animation
...

// To start
element.BeginAnimation(Property, myAnimation);

// To stop and keep the current value of the animated property
myAnimation.BeginTime = null;
element.BeginAnimation(Property, myAnimation);

Wenn Sie möchten, dass der Basiswert wieder zum effektiven Wert wird, müssen Sie die Animation daran hindern, die Eigenschaft zu beeinflussen.Es gibt drei Möglichkeiten, dies mit Storyboard -Animationen zu tun:

  • Stellen Sie das FillBehavior -Eigenschaft der Animation ein, um anzuhalten
  • Entfernen Sie das gesamte Storyboard
  • Entfernen Sie die Animation von der einzelnen Eigenschaft

Von MSDN

Wie man:Legen Sie eine Eigenschaft fest, nachdem Sie sie mit einem Storyboard animiert haben

In meinem Fall musste ich zwei Befehle verwenden: Mein XAML verfügt über eine Schaltfläche, die einen Auslöser auslöst, und sein Auslöser löst die Storyboard-Animation aus.

Ich habe eine Schaltfläche zum Stoppen der Animation mit diesem Code dahinter eingefügt:

MyBeginStoryboard.Storyboard.Begin(this, true);
MyBeginStoryboard.Storyboard.Stop(this);

Mir gefällt es nicht, aber es funktioniert hier wirklich.Versuche es!

<Trigger.EnterActions>
       <BeginStoryboard x:Name="myStory">
       .........
       </BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
       <StopStoryboard BeginStoryboardName="myStory"/>
</Trigger.ExitActions>

Platzieren Sie die Animation in einem StoryBoard.Rufen Sie Begin() und Stop() auf dem Storyboard auf, um die Animationen zu starten und zu stoppen.

Sie können diesen Code verwenden:

[StoryBoardName].Remove([StoryBoardOwnerControl]);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top