2010-02-04 6 views
7

ho qualcosa questo:WPF - animazione sincrono

scaleTransform.BeginAnimation(ScaleTransform.ScaleXProperty, shrinkAnimation); 
scaleTransform.BeginAnimation(ScaleTransform.ScaleYProperty, shrinkAnimation); 
MyDialog.Show(); 

Le animazioni funzionare correttamente in parallelo (x ed y restringono insieme), ma perché BeginAnimation è una chiamata asincrona, il metodo Show() viene eseguita mentre l'animazione è ancora in esecuzione (supponiamo che shrinkAnimation funzioni per 1 secondo).

Come posso attendere il completamento delle animazioni prima di chiamare Show()?

Grazie!

+0

Una soluzione semplice che Mike potrebbe essere quella di sostituire la mia ultima riga di codice con: shrinkAnimation.Completed + = {delegato MyDialog.Show(); }; –

risposta

4

È possibile utilizzare un Storyboard, che ha un evento completato, anziché il metodo BeginAnimation. Ecco un esempio, impostando l'opacità, ma è lo stesso concetto:

DoubleAnimation animation = new DoubleAnimation(0.0, new Duration(TimeSpan.FromSeconds(1.0))); 

Storyboard board = new Storyboard(); 
board.Children.Add(animation); 

Storyboard.SetTarget(animation, MyButton); 
Storyboard.SetTargetProperty(animation, new PropertyPath("(Opacity)")); 

board.Completed += delegate 
{ 
    MessageBox.Show("DONE!"); 
}; 

board.Begin();