2010-02-04 15 views
7

że coś to:WPF - synchroniczna animacja

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

W animacji móc równolegle (x i y kurczenia razem), ale z powodu BeginAnimation jest asynchroniczne połączenie, przy czym sposób Show() zostaje wykonany, podczas gdy animacja nadal działa (załóżmy, że shrinkAnimation działa przez 1 sekundę).

Jak mogę poczekać na zakończenie animacji przed wywołaniem Show()?

Dzięki!

+0

Rozwiązanie łatwiejsze niż Mike byłoby zastąpić mój ostatni wiersz kodu z: shrinkAnimation.Completed + = delegat {MyDialog.Show(); }; –

Odpowiedz

4

Możesz użyć Storyboard, który ma zakończone wydarzenie, zamiast tej metody BeginAnimation. Oto przykład, ustawienie krycia, ale to samo pojęcie:

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