2010-02-04 7 views
7

У меня есть что-то это:WPF - синхронная анимация

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

анимаций правильно работать параллельно (х и у сжиматься вместе), а потому, что BeginAnimation асинхронный вызов, метод Show() запускается на выполнение в то время как анимация все еще работает (предположим, что shrinkAnimation работает в течение 1 секунды).

Как дождаться завершения анимации перед вызовом Show()?

Спасибо!

+0

Решение проще, чем Майк должен был бы заменить мою последнюю строку кода с: shrinkAnimation.Completed + = делегатом {MyDialog.Show(); }; –

ответ

4

Вы можете использовать Storyboard, который имеет завершенное событие, а не BeginAnimation. Вот пример, установив непрозрачность, но это то же самое понятие:

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(); 
Смежные вопросы