Przegląd Animacja i system chronometrażu

W tym temacie opisano sposób, w jaki system chronometrażu używa animacji, Timeline i Clock klas do animowania właściwości.

Wymagania wstępne

Aby zrozumieć ten temat, należy być w stanie używać WPF animacji do animowania właściwości, zgodnie z opisem w omówieniu animacji. Pomaga również znać właściwości 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 opisany w temacie jak Timeline reprezentuje segment czasu, a animacja jest typem Timeline , który generuje wartości wyjściowe. Sama, a Timeline , nie robi niczego poza opisywanym segmentem czasu. Jest to obiekt osi czasu Clock , który wykonuje rzeczywistą prace. Analogicznie, animacje nie są faktycznie animowane właściwości: Klasa animacji opisuje sposób obliczania wartości wyjściowych, ale jest to, Clock która została utworzona dla animacji, która obsługuje dane wyjściowe animacji i stosuje go do właściwości.

A Clock jest specjalnym typem obiektu, który utrzymuje czas wykonywania związany z chronometrażem dla Timeline . Zawiera trzy bity informacji, które są niezbędne dla animacji i systemu chronometrażu: CurrentTime , CurrentProgress , i CurrentState . A Clock określa bieżącą godzinę, postęp i stan przy użyciu zachowań chronometrażu opisanych przez jego Timeline : Duration , RepeatBehavior , AutoReverse , i tak dalej.

W większości przypadków Clock jest tworzony automatycznie dla osi czasu. W przypadku animacji przy użyciu Storyboard lub BeginAnimation metody zegary są automatycznie tworzone dla osi czasu i animacji i stosowane do ich właściwości. Możesz również utworzyć Clock jawnie za pomocą CreateClock metody Timeline . MediaTimeline.CreateClockMetoda tworzy zegar odpowiedniego typu dla, Timeline na którym jest wywoływana. Jeśli Timeline zawiera podrzędne osie czasu, tworzy Clock również obiekty dla nich. Obiekty powstałe Clock 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, które odpowiadają jednemu z różnych Timeline typów.

Typ osi czasu Typ zegara Przeznaczenie 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 steruje swoimi obiektami podrzędnymi Clock
Storyboard ClockGroup Grupuje i steruje swoimi obiektami podrzędnymi Clock

AnimationClockZa pomocą metody można zastosować wszystkie obiekty utworzone w celu uzyskania zgodnych właściwości zależności ApplyAnimationClock .

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

Animowanie obiektów w programie WPF jest menedżerem czasu, który zarządza Clock obiektami utworzonymi dla osi czasu. Menedżer czasu jest katalogiem głównym drzewa Clock obiektów i steruje przepływem czasu w tym drzewie. Menedżer czasu jest tworzony automatycznie dla każdej WPF aplikacji i jest niewidoczny dla deweloperów aplikacji. Menedżer czasu "Ticks" wiele razy na sekundę; Rzeczywista liczba taktów, która występuje w każdej sekundzie, różni się w zależności od dostępnych zasobów systemowych. W każdym z tych taktów Menedżer czasu oblicza stan wszystkich Active Clock obiektów w drzewie chronometrażu.

Poniższa ilustracja przedstawia relację między menedżerem czasu a i AnimationClock właściwością zależności animowanej.

Składniki systemu chronometrażu
Animowanie właściwości

Po zakończeniu taktów Menedżera czasu program aktualizuje czas każdego Active Clock w aplikacji. Jeśli Clock jest AnimationClock , używa GetCurrentValue metody, AnimationTimeline z której został utworzony, aby obliczyć bieżącą wartość wyjściową. AnimationClockDostarcza z AnimationTimeline bieżącym czasem lokalnym, wartością wejściową, która jest zwykle wartością podstawową właściwości i domyślną wartością docelową. Po pobraniu wartości animowanych właściwości przy użyciu GetValue metody lub jej metody dostępu CLR otrzymujesz dane wyjściowe AnimationClock .

Grupy zegara

W poprzedniej sekcji opisano, jak istnieją różne typy Clock obiektów dla różnych typów osi czasu. Na poniższej ilustracji przedstawiono relacje między menedżerem czasu, a ClockGroup , AnimationClock a i animowaną właściwością zależności. ClockGroupTworzony jest dla osi czasu, które grupują inne osie czasu, takie jak Storyboard Klasa, która grupuje animacje i inne osie czasu.

Składniki systemu chronometrażu
Element Clock

Kompozycja

Istnieje możliwość skojarzenia wielu zegarów z pojedynczą właściwością, w tym przypadku każdy zegar używa wartości wyjściowej poprzedniego zegara jako jego wartości podstawowej. Na poniższej ilustracji przedstawiono trzy AnimationClock obiekty zastosowane do tej samej właściwości. Clock1 używa podstawowej wartości właściwości animowanej jako danych wejściowych i używa jej do generowania danych wyjściowych. Clock2 pobiera dane wyjściowe z Clock1 jako dane wejściowe i używa ich do generowania danych wyjściowych. Clock3 pobiera dane wyjściowe z Clock2 jako dane wejściowe i używa ich do generowania danych wyjściowych. Gdy wiele zegarów ma tę samą Właściwość jednocześnie, są one uznawane za w łańcuchu kompozycji.

Składniki systemu chronometrażu
Łańcuch kompozycji

Należy zauważyć, że mimo że relacja jest tworzona między danymi wejściowymi i wyjściowymi AnimationClock obiektów w łańcuchu kompozycji, ich zachowania ich chronometrażu nie wpływają; Clock obiekty (w tym AnimationClock obiekty) mają hierarchiczną zależność od obiektów nadrzędnych Clock .

Aby zastosować wiele zegarów do tej samej właściwości, użyj Compose HandoffBehavior podczas stosowania Storyboard animacji lub AnimationClock .

Znaczniki i konsolidacja zdarzeń

Poza obliczaniem wartości wyjściowych, Menedżer czasu wykonuje inne czynności przy każdym taktie: określa stan każdego zegara i wywołuje odpowiednie zdarzenia.

Podczas gdy takty są często wykonywane, istnieje możliwość, że wiele rzeczy przechodzą między taktami. Na przykład Clock może zostać zatrzymana, uruchomiona i zatrzymana ponownie. w takim przypadku jego CurrentState wartość zostanie zmieniona trzy razy. Teoretycznie CurrentStateInvalidated zdarzenie może być wywoływane wiele razy w jednym taktie, jednak aparat chronometrażu konsoliduje zdarzenia, dzięki czemu CurrentStateInvalidated zdarzenie może być wywoływane maksymalnie raz na takt. Dotyczy to wszystkich zdarzeń chronometrażu: co najmniej jedno zdarzenie każdego typu jest wywoływane dla danego Clock obiektu.

Gdy Clock przełączniki są stanowe i przywracają pierwotny stan między taktami (na przykład zmiana z Active do Stopped i z powrotem na Active ), skojarzone zdarzenie nadal występuje.

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

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

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

Podczas animacji właściwości AnimationClock ustawia bieżącą wartość właściwości. Pobieranie wartości właściwości poprzez metodę dostępu CLR lub GetValue Metoda zwraca dane wyjściowe polecenia AnimationClock when AnimationClock Active lub Filling . Wartość podstawową właściwości można pobrać przy użyciu GetAnimationBaseValue metody.

Zobacz też