WPF - LayoutUpdated событие запускается повторно

Я добавил немного анимации в свое приложение WPF.

БлагодаряУникальное решение Дана Кревье для анимации детей панели в сочетании спотрясающая анимация WPF Penner оказалось довольно просто сделать один из моих элементов управления великолепным и заставить его детей двигаться с хорошей анимацией.

К сожалению, все это связано с потерей производительности. Я рад, что производительность снижается при добавлении / удалении элементов или изменении размера элемента управления, но кажется, что этот эффект происходит постоянно на протяжении всего жизненного цикла приложения, даже когда элементы полностью статичны.

PanelLayoutAnimator класс использует присоединенное свойство для подключенияUIElement.LayoutUpdated мероприятие. Когда происходит это событие, преобразования визуализации анимируются, чтобы дети могли скользить на свои новые позиции.

К сожалению, кажется, чтоLayoutUpdated событие срабатывает каждую секунду или около того, даже когда в приложении ничего не происходит (по крайней мере, я не думаю, что мой код что-то делает - приложение не имеет фокуса, а мышь устойчива). Причина этого события не сразу становится очевидным для обработчика событий, все дочерние элементы управления должны быть переоценены. Это событие вызывается примерно раз в секунду в режиме ожидания. Частота увеличивается при использовании приложения.

Итак, мой вопрос, как я могу улучшить производительность здесь? Любой ответ, который поможет, был бы оценен, но я в настоящее время застрял на этих подвопросах:

Что вызываетLayoutUpdated событие, чтобы стрелять так часто? Это должно произойти, и если нет, как я могу узнать, почему он стреляет, и сократить его?

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

Сейчас я буду работать над этой проблемой, отключив анимацию, когда есть больше, чемN дети в панели.

Ответы на вопрос(1)

Ваш ответ на вопрос