Storyboard entfernen, aber animierten Wert beibehalten?

9

Wie kann ich ein Storyboard in XAML entfernen (d. h. Aktion "RemoveStoryboard" in einem DataTrigger), aber den animierten Wert beibehalten? Ähnlich der Animatable.BeginAnimation :

  

Wenn die BeginTime der Animation null ist, werden alle aktuellen Animationen entfernt und der aktuelle Wert der Eigenschaft wird beibehalten.

    
bitbonk 05.11.2009, 22:39
quelle

2 Antworten

4

Die primäre Verwendung von RemoveStoryboard besteht darin, die animierten Werte zu entfernen und sie in ihren nicht animierten Zustand zurückzusetzen. In den meisten Fällen können Sie den Aufruf einfach in PauseStoryboard oder StopStoryboard umschalten, abhängig vom jeweiligen Fall. Die einzige Ausnahme ist, wenn Sie Ressourcen freigeben müssen, die vom Storyboard gehalten werden, oder sie für einen anderen Zweck verwenden.

Wenn Sie wirklich das Storyboard entfernen möchten, und die Eigenschaftswerte zu halten, müssen Sie die animierten Werte direkt auf die Eigenschaften. Dies kann getan werden, indem Sie jeden Wert auf den animierten Wert setzen, etwa so:

%Vor%

Rufen Sie dieses Recht auf, bevor Sie das Storyboard entfernen, um die animierten Werte zu kopieren.

Bearbeiten Es wurde ein Kommentar erstellt, dass dieser Code möglicherweise unnötig ist, da der Aufruf von BeginAnimation mit BeginTime = null einen ähnlichen Effekt erzielt.

Es stimmt zwar, dass Beginanimation mit Begintime = null macht es so aussieht, als ob die Werte der lokalen kopiert wurden, zu einem späteren Aufruf RemoveStoryboard die Werte bewirken zurückzukehren. Dies liegt daran, mit Beginanimation Begintime = null die vorherige Animation bewirkt ihre Werte in Erwartung des Beginns der neuen Animation zu halten, aber nichts, um die lokalen Werte zu beeinflussen.

Der obige Code tatsächlich überschreibt lokale Werte, so dass alle Animationen entfernt werden kann und die Objekte werden nach wie vor ihre neuen Werte haben. Wenn Sie also RemoveStoryboard wirklich aufrufen und Ihre Werte beibehalten möchten, benötigen Sie den Code, den ich oben geschrieben habe, oder etwas Ähnliches.

    
Ray Burns 06.11.2009, 04:13
quelle
1

Ich hatte ein ähnliches Problem bei der Verwendung von AnimationTimeline . Die einfachste Lösung bestand darin, das Completed -Ereignis im Code hinter und vor dem Aufruf von BeginAnimation mit dem null -Parameter zu erfassen, um die Animation zu entfernen, den aktuellen Wert der Eigenschaft abzurufen und diesen zu verwenden.

Dies ruft den letzten animierten Wert ab und setzt ihn.

%Vor%     
Steven Jeuris 23.04.2012 01:14
quelle