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

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

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

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


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


Ответы (2)


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

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

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

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