Подождите, пока все анимации WPF остановятся.

Учитывая окно WPF, которое может иметь или не иметь анимацию, я хотел бы подождать, пока все они не будут выполнены, прежде чем продолжить обработку. Есть ли общий способ сделать это. В настоящее время я могу сделать что-то вроде этого:

void WaitForAnimation(Storyboard storyboard)
{
    WaitUntil(() => storyboard.GetCurrentState() == ClockState.Stopped);
}

Но это предполагает, что я знаю раскадровки или каким-то образом могу их найти. Есть ли способ сделать это?


person Ray    schedule 11.04.2010    source источник


Ответы (2)


arrow_upward
1
arrow_downward

Предлагается использовать событие Storyboard.Completed, чтобы узнать завершение каждой раскадровки.

person Kishore Kumar    schedule 11.04.2010
comment
Да, но как получить все соответствующие раскадровки? - person Ray; 11.04.2010
comment
гуд вопрос. позвольте мне искать, и если я найду что-то полезное, я дам вам знать. Пожалуйста, обновите меня, если вы что-то получите. - person Kishore Kumar; 12.04.2010

arrow_upward
0
arrow_downward

Почему бы просто не присвоить своим раскадровкам имя x:Name и не поместить их в коллекцию в отделенном коде? Сколько из них у вас есть?

person majocha    schedule 11.04.2010
comment
Это очень общая проблема. Мне просто дают окно. Я не знаю, сколько будет раскадровок — если вообще будут. - person Ray; 12.04.2010
comment
Тогда это довольно сложно. Класс, наследующий от окна, может иметь раскадровки, созданные в отделенном коде как частные свойства или локальные переменные. Он может даже анимировать вообще без раскадровки. Чтобы получить более общий контроль над анимацией в вашем базовом классе, вам придется применить некоторый контракт. Например: анимируйте, используя только раскадровки в качестве ресурсов — тогда легко получить в коде все раскадровки с помощью FindResource и проверить их состояние. - person majocha; 12.04.2010