Przegląd Animacja i system chronometrażu

W tym temacie opisano, jak system chronometrażu używa animacji, Timelinei Clock klas do animowania właściwości.

Wymagania wstępne

Aby zrozumieć ten temat, należy użyć animacji WPF do animowania właściwości, zgodnie z opisem w temacie Przegląd animacji. Pomaga również zapoznać się z właściwościami zależności; Aby uzyskać więcej informacji, zobacz Omówienie właściwości zależności.

Osie czasu i zegary

Przegląd animacji opisał sposób Timeline przedstawiania segmentu czasu, a animacja jest typemTimeline, który generuje wartości wyjściowe. Sam element Timeline, nie robi nic innego niż tylko opis segmentu czasu. Jest to obiekt osi czasu Clock , który wykonuje rzeczywistą pracę. Podobnie animacja nie animuje właściwości: klasa animacji opisuje sposób obliczania wartości wyjściowych, ale jest to Clock wartość utworzona dla animacji, która napędza dane wyjściowe animacji i stosuje ją do właściwości.

A Clock to specjalny typ obiektu, który utrzymuje stan czasu wykonywania powiązany z chronometrażem dla elementu Timeline. Udostępnia trzy bity informacji, które są niezbędne dla systemu animacji i chronometrażu: CurrentTime, CurrentProgressi CurrentState. Element Clock określa jego bieżący czas, postęp i stan przy użyciu zachowań chronometrażu opisanych w temacie Timeline: Duration, RepeatBehavior, AutoReversei tak dalej.

W większości przypadków element Clock jest tworzony automatycznie dla osi czasu. Podczas animowania przy użyciu Storyboard metody lub BeginAnimation zegary są automatycznie tworzone dla osi czasu i animacji oraz stosowane do ich właściwości docelowych. Można również utworzyć Clock jawnie za pomocą CreateClock metody Timeline. Metoda MediaTimeline.CreateClock tworzy zegar odpowiedniego typu, na Timeline którym jest wywoływana. Jeśli element Timeline zawiera osie czasu podrzędnego, tworzy Clock również obiekty dla nich. Clock Wynikowe obiekty są rozmieszczone w drzewach, które pasują do struktury Timeline drzewa obiektów, z którego są tworzone.

Istnieją różne typy zegarów dla różnych typów osi czasu. W poniższej tabeli przedstawiono Clock typy odpowiadające niektórym z różnych Timeline typów.

Typ osi czasu Typ zegara Cel zegara
Animacja (dziedziczy z AnimationTimeline) AnimationClock Generuje wartości wyjściowe dla właściwości zależności.
MediaTimeline MediaClock Przetwarza plik multimedialny.
ParallelTimeline ClockGroup Grupuje i kontroluje obiekty podrzędne Clock
Storyboard ClockGroup Grupuje i kontroluje obiekty podrzędne Clock

Można zastosować wszystkie AnimationClock obiekty tworzone do zgodnych właściwości zależności przy użyciu ApplyAnimationClock metody .

W scenariuszach intensywnie korzystających z wydajności, takich jak animowanie dużej liczby podobnych obiektów, zarządzanie własnym Clock użyciem może zapewnić korzyści z wydajności.

Zegary i Menedżer czasu

Podczas animowania obiektów w WPF jest to menedżer czasu, który zarządza Clock obiektami utworzonymi dla osi czasu. Menedżer czasu jest katalogiem głównym drzewa Clock obiektów i kontroluje przepływ czasu w tym drzewie. Menedżer czasu jest tworzony automatycznie dla każdej aplikacji WPF i jest niewidoczny dla dewelopera aplikacji. Menedżer czasu "tyka" wiele razy na sekundę; rzeczywista liczba kleszczy, które występują w każdej sekundzie, różni się w zależności od dostępnych zasobów systemowych. Podczas każdego z tych znaczników menedżer czasu oblicza stan wszystkich ActiveClock obiektów w drzewie chronometrażu.

Na poniższej ilustracji przedstawiono relację między menedżerem czasu i AnimationClockwłaściwością animowanej zależności.

Timing system components and the time manager.
Animowanie właściwości

Gdy menedżer czasu zaznacza, aktualizuje czas każdego ActiveClock w aplikacji. Jeśli element Clock to , AnimationClockużywa GetCurrentValue metody AnimationTimeline , z której została utworzona, aby obliczyć bieżącą wartość wyjściową. Element AnimationClock dostarcza wartość AnimationTimeline z bieżącą godziną lokalną, wartość wejściową, która jest zazwyczaj wartością bazową właściwości i domyślną wartością docelową. Po pobraniu wartości animowanej za pomocą GetValue metody lub jej metody dostępu CLR uzyskasz dane wyjściowe elementu AnimationClock.

Grupy zegarów

W poprzedniej sekcji opisano, jak istnieją różne typy Clock obiektów dla różnych typów osi czasu. Poniższa ilustracja przedstawia relację między menedżerem czasu, właściwością ClockGroup, i AnimationClockanimowaną zależnością. Element ClockGroup jest tworzony dla osi czasu grupujących inne osie czasu, takie jak Storyboard klasa, która grupuje animacje i inne osie czasu.

Timing system components with the time manager and dependency properties.
Grupa zegara

Kompozycja

Istnieje możliwość skojarzenia wielu zegarów z jedną właściwością, w tym przypadku każdy zegar używa wartości wyjściowej poprzedniego zegara jako wartości bazowej. Na poniższej ilustracji przedstawiono trzy AnimationClock obiekty zastosowane do tej samej właściwości. Zegar1 używa podstawowej wartości właściwości animowanej jako danych wejściowych i używa jej do generowania danych wyjściowych. Zegar2 pobiera dane wyjściowe z zegara Clock1 jako dane wejściowe i używa go do generowania danych wyjściowych. Zegar3 pobiera dane wyjściowe z zegara Clock2 jako dane wejściowe i używa go do generowania danych wyjściowych. Gdy wiele zegarów wpływa jednocześnie na tę samą właściwość, mówi się, że znajdują się w łańcuchu kompozycji.

Timing system components composed with multiple dependency properties.
Łańcuch kompozycji

Należy pamiętać, że chociaż relacja jest tworzona wśród danych wejściowych i wyjściowych AnimationClock obiektów w łańcuchu kompozycji, ich zachowania dotyczące chronometrażu nie mają wpływu; Clock obiekty (w tym AnimationClock obiekty) mają hierarchiczną zależność od ich obiektów nadrzędnych Clock .

Aby zastosować wiele zegarów do tej samej właściwości, użyj parametru ComposeHandoffBehavior podczas stosowania Storyboardanimacji lub AnimationClock.

Znaczniki i konsolidacja zdarzeń

Oprócz obliczania wartości wyjściowych menedżer czasu wykonuje inną pracę za każdym razem, gdy tyka: określa stan każdego zegara i zgłasza zdarzenia zgodnie z potrzebami.

Podczas gdy kleszcze występują często, istnieje możliwość, że wiele rzeczy dzieje się między kleszczami. Na przykład Clock wartość może zostać zatrzymana, uruchomiona i zatrzymana ponownie, w tym przypadku jej CurrentState wartość zostanie zmieniona trzy razy. Teoretycznie CurrentStateInvalidated zdarzenie może być podniesione wiele razy w jednym kleszczu, jednak aparat chronometrażu konsoliduje zdarzenia, aby CurrentStateInvalidated zdarzenie można było podnieść co najwyżej raz na kleszcza. Dotyczy to wszystkich zdarzeń chronometrażu: dla danego Clock obiektu jest zgłaszane co najwyżej jedno zdarzenie każdego typu.

Gdy Clock stan przełączy się i powróci do pierwotnego stanu między znacznikami (na przykład zmiana z Active na Stopped i z powrotem na Active), skojarzone zdarzenie nadal występuje.

Aby uzyskać więcej informacji o zdarzeniach chronometrażu, zobacz Omówienie zdarzeń chronometrażu.

Bieżące wartości i wartości podstawowe właściwości

Właściwość niemożliwa do dostosowania może mieć dwie wartości: wartość podstawową i bieżącą wartość. Po ustawieniu właściwości przy użyciu metody dostępu CLR lub metody należy ustawić jej wartość podstawową SetValue . Jeśli właściwość nie jest animowana, jej podstawowe i bieżące wartości są takie same.

Podczas animowania właściwości ustawia AnimationClockbieżącą wartość właściwości. Pobieranie wartości właściwości za pomocą metody dostępu CLR lub GetValue metoda zwraca dane wyjściowe elementu AnimationClock , gdy AnimationClock parametr jest Active lub Filling. Wartość podstawową właściwości można pobrać przy użyciu GetAnimationBaseValue metody .

Zobacz też