Come interrompere un'animazione in C#/WPF?
Domanda
Ho qualcosa del genere:
barProgress.BeginAnimation(RangeBase.ValueProperty, new DoubleAnimation( barProgress.Value, dNextProgressValue, new Duration(TimeSpan.FromSeconds(dDuration)));
Ora, come fermeresti quell'animazione (the DoubleAnimation
)?Il motivo per cui voglio farlo è perché vorrei iniziare nuove animazioni (sembra funzionare, ma è difficile dirlo) ed eventualmente interrompere l'ultima animazione...
Soluzione
Per fermarlo, chiama BeginAnimation
di nuovo con il secondo argomento impostato su null
.
Altri suggerimenti
Quando utilizzi gli storyboard per controllare un'animazione, assicurati di impostare il secondo parametro su true per impostare l'animazione come controllabile:
public void Begin(
FrameworkContentElement containingObject,
**bool isControllable**
)
Esistono due modi per interrompere BeginAnimation.Il primo consiste nel chiamare nuovamente BeginAnimation con il secondo parametro impostato su null.Ciò rimuoverà tutte le animazioni sulla proprietà e ripristinare il valore torna al suo valore base.
A seconda di come utilizzi quel valore, questo potrebbe non essere il comportamento desiderato.Il secondo modo è impostare le animazioni BeginTime su null e quindi chiamare BeginAnimation con esso.Ciò rimuoverà l'animazione specifica e lascerà il valore nella posizione corrente.
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);
Se vuoi che il valore di base ritorni di nuovo il valore effettivo, devi impedire all'animazione di influenzare la proprietà.Ci sono tre modi per farlo con le animazioni dello storyboard:
- Imposta la proprietà Fillbehavior dell'animazione per fermare
- Rimuovi l'intero Storyboard
- Rimuovi l'animazione dalla proprietà individuale
Da MSDN
Come:Imposta una proprietà dopo averla animata con uno storyboard
Nel mio caso ho dovuto utilizzare due comandi, il mio xaml ha un pulsante che attiva un trigger e il suo trigger attiva l'animazione dello storyboard.
Ho inserito un pulsante per interrompere l'animazione con questo codice dietro:
MyBeginStoryboard.Storyboard.Begin(this, true);
MyBeginStoryboard.Storyboard.Stop(this);
Non mi piace ma qui funziona davvero.Provaci!
<Trigger.EnterActions>
<BeginStoryboard x:Name="myStory">
.........
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<StopStoryboard BeginStoryboardName="myStory"/>
</Trigger.ExitActions>
Posiziona l'animazione in uno StoryBoard.Chiama Begin() e Stop() nello storyboard per iniziare a interrompere le animazioni.
Puoi usare questo codice:
[StoryBoardName].Remove([StoryBoardOwnerControl]);