2010-02-04 21 views
7

tengo algo esto:WPF - animación sincronizada

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

Las animaciones se ejecutan correctamente en paralelo (x e y se contraen entre sí), sino porque BeginAnimation es una llamada asincrónica, el método Show() es ejecutado mientras que la animación es sigue ejecutándose (supongamos que shrinkAnimation se ejecuta durante 1 segundo).

¿Cómo puedo esperar a que se completen las animaciones antes de llamar al Show()?

Gracias!

+0

Una solución más fácil que Mike sería sustituir la última línea de código con: shrinkAnimation.Completed + = {delegado MyDialog.Show(); }; –

Respuesta

4

Puede usar un Storyboard, que tiene un evento completo, en lugar del método BeginAnimation. He aquí un ejemplo, el establecimiento de opacidad, pero es el mismo concepto:

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(); 
Cuestiones relacionadas