WPF - LayoutUpdated event firing wielokrotnie

Dodałem trochę animacji do mojej aplikacji WPF.

DziękiUnikalne rozwiązanie Dana Creviera do animowania dzieci panelu w połączeniu zniesamowite animacje WPF Penner okazało się dość proste, aby sprawić, by jeden z moich elementów sterujących wyglądał wspaniale i aby jego dzieci poruszały się z jakąś fajną animacją.

Niestety wszystko to ma wpływ na wydajność. Cieszę się, że osiągnięto spadek wydajności, gdy elementy są dodawane / usuwane lub formant jest zmieniany, ale wydaje się, że ten hit perfekcyjny występuje konsekwentnie przez cały okres eksploatacji aplikacji, nawet gdy elementy są całkowicie statyczne.

ThePanelLayoutAnimator klasa używa dołączonej właściwości do podczepieniaUIElement.LayoutUpdated zdarzenie. Po uruchomieniu tego zdarzenia transformacje renderowania są animowane, aby dzieci mogły przesuwać się do nowych pozycji.

Niestety wydaje się, żeLayoutUpdated zdarzenie jest wywoływane co sekundę lub mniej, nawet jeśli w aplikacji nic się nie dzieje (przynajmniej nie sądzę, aby mój kod coś robił - aplikacja nie ma ostrości i mysz jest stabilna). nie jest od razu widoczne dla obsługi zdarzeń, wszystkie dzieci kontroli muszą zostać ponownie ocenione. To zdarzenie jest wywoływane raz na sekundę, gdy jest bezczynne. Częstotliwość wzrasta, gdy faktycznie korzystasz z aplikacji.

Moje pytanie brzmi: jak mogę poprawić wydajność tutaj? Każda odpowiedź, która pomoże, byłaby doceniana, ale obecnie utknąłem w tych pytaniach podrzędnych:

Co powodujeLayoutUpdated zdarzenie tak często strzelać? Czy to ma się wydarzyć, a jeśli nie, to jak mogę się dowiedzieć, dlaczego strzelają i je ograniczają?

Czy przewodnik ma wygodniejszy sposób na sprawdzenie, czy coś się wydarzyło, co mogło spowodować przeniesienie dzieci? Jeśli tak, mógłbym wcześnie wyskoczyć i uniknąć kosztów związanych z zapętleniem każdego dziecka.

Na razie obejdę ten problem, wyłączając animację, gdy jest ich więcejN dzieci w panelu.

questionAnswers(1)

yourAnswerToTheQuestion