Событие WPF - LayoutUpdated, стреляющее неоднократно

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

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

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

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

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

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

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

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

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

8
задан Drew Noakes 15 May 2010 в 17:06
поделиться