2010-02-04 7 views
7

J'ai quelque chose à ceci:WPF - animation synchrone

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

Les animations fonctionnent correctement en parallèle (x et y rétrécissent ensemble), mais parce que BeginAnimation est un appel asynchrone, la méthode Show() est exécuté alors que l'animation est toujours en cours (supposons que shrinkAnimation fonctionne pendant 1 seconde).

Comment puis-je attendre la fin des animations avant d'appeler Show()?

Merci!

+0

est une solution plus facile que Mike serait de remplacer ma dernière ligne de code avec: shrinkAnimation.Completed + = {délégué MyDialog.Show(); } –

Répondre

4

Vous pouvez utiliser un Storyboard, qui a un événement terminé, au lieu de la méthode BeginAnimation. Voici un exemple, paramètre d'opacité, mais il est le même concept:

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