Animace a časování přehledu systému

Toto téma popisuje, jak systém časování používá animace Timeline a třídy k animace Clock vlastností.

Požadavky

Abyste porozuměli tomuto tématu, měli byste být schopni použít animace WPF k animace vlastností, jak je popsáno v tématu Přehled animace. Pomáhá také seznámit se s vlastnostmi závislostí. Další informace najdete v tématu Přehled vlastností závislosti.

Časové osy a hodiny

Přehled animace popisuje, jak představuje segment času, a animace je typ, který vytváří výstupní Timeline hodnoty. Sám o sobě , kromě popisu časového úseku Timeline nic jiného. Jedná se o objekt časové Clock osy, který skutečně pracuje. Animace také ve skutečnosti animace vlastností není: třída animace popisuje, jak se mají vypočítat výstupní hodnoty, ale je to objekt vytvořený pro animaci, která řídí výstup animace a aplikuje ji Clock na vlastnosti.

Je speciální typ objektu, který udržuje stav běhu související s Clock časování pro Timeline . Poskytuje tři části informací, které jsou nezbytné pro systém animace a časování: CurrentTimeCurrentProgress , a CurrentState . Objekt určuje aktuální čas, průběh a stav pomocí chování časování popsaných v parametru ClockTimeline : , , DurationRepeatBehaviorAutoReverse atd.

Ve většině případů se Clock automaticky vytvoří objekt pro časovou osu. Při animace pomocí metody nebo se pro časové osy a animace automaticky vytvoří hodiny a použijí se u StoryboardBeginAnimation jejich cílových vlastností. Můžete také explicitně Clock vytvořit pomocí metody vašeho CreateClockTimeline . Metoda MediaTimeline.CreateClock vytvoří hodiny odpovídajícího typu pro , na Timeline kterém je volána. Pokud objekt Timeline obsahuje podřízené časové osy, vytvoří pro ně také Clock objekty. Výsledné Clock objekty jsou uspořádány do stromů, které odpovídají struktuře stromu Timeline objektů, ze kterého jsou vytvořeny.

Existují různé typy hodin pro různé typy časových os. Následující tabulka uvádí Clock typy, které odpovídají některým z různých Timeline typů.

Typ časové osy Typ hodin Účel hodin
Animace (dědí z AnimationTimeline ) AnimationClock Generuje výstupní hodnoty pro vlastnost závislosti.
MediaTimeline MediaClock Zpracuje mediální soubor.
ParallelTimeline ClockGroup Seskupuje a řídí podřízené Clock objekty.
Storyboard ClockGroup Seskupuje a řídí podřízené Clock objekty.

Všechny objekty, AnimationClock které vytvoříte, můžete použít na kompatibilní vlastnosti závislostí pomocí ApplyAnimationClock metody .

Ve scénářích náročných na výkon, jako je například animace velkého počtu podobných objektů, může správa vlastního použití Clock poskytnout výkonové výhody.

Hodiny a správce času

Při animace objektů ve WPF je správcem času, který spravuje objekty vytvořené Clock pro časové osy. Správce času je kořen stromu objektů a řídí tok času Clock v tomto stromu. Správce času se automaticky vytvoří pro každou aplikaci WPF a pro vývojáře aplikace je neviditelný. Správce času "zaškrtá" mnohokrát za sekundu. Skutečný počet kmitání, ke kterým dochází každou sekundu, se liší v závislosti na dostupných systémových zdrojích. Během každého z těchto kmitání vypočítá správce času stav všech objektů ActiveClock ve stromu časování.

Následující obrázek znázorňuje vztah mezi časovým manažerem a AnimationClock a animovanou vlastností závislosti.

Timing system components
Animace vlastnosti

Když časový manažer zaškrtá, aktualizuje čas každého v ActiveClock aplikaci. Pokud je , použije metodu třídy , ze které byla vytvořena, k ClockAnimationClockGetCurrentValueAnimationTimeline výpočtu aktuální výstupní hodnoty. Parametr poskytuje aktuální místní čas, vstupní hodnotu, což je obvykle základní hodnota AnimationClockAnimationTimeline vlastnosti, a výchozí cílovou hodnotu. Když načtete hodnotu animované vlastnosti pomocí metody nebo jejího přístupového objektu CLR, získáte GetValue výstup objektu AnimationClock .

Skupiny hodin

Předchozí část popisuje, jak existují různé typy objektů Clock pro různé typy časových os. Následující obrázek znázorňuje vztah mezi time managerem, , a ClockGroupAnimationClock animovanou vlastností závislosti. Vytvoří se pro časové osy, které seskupí další časové osy, například třídu , která seskupuje animace ClockGroupStoryboard a další časové osy.

Timing system components
A ClockGroup

Složení

K jedné vlastnosti je možné přidružit více hodin. V takovém případě každý čas použije výstupní hodnotu předchozích hodin jako svou základní hodnotu. Následující obrázek znázorňuje tři AnimationClock objekty použité na stejnou vlastnost. Clock1 používá jako vstup základní hodnotu animované vlastnosti a používá ji k vygenerování výstupu. Clock2 přebírá výstup z Clock1 jako svůj vstup a používá ho k vygenerování výstupu. Clock3 přebírá výstup z Clock2 jako vstup a používá ho k vygenerování výstupu. Pokud stejnou vlastnost ovlivňuje současně více hodin, říká se, že jsou v kompozičním řetězci.

Timing system components
Kompoziční řetězec

Všimněte si, že i když je mezi vstupem a výstupem objektů v řetězu složení vytvořena relace, jejich chování časování není ovlivněno; objekty (včetně objektů) mají hierarchickou závislost na nadřazených AnimationClockClockAnimationClockClock objektech.

Pokud chcete použít více hodin na stejnou vlastnost, použijte při ComposeHandoffBehavior použití , animace nebo StoryboardAnimationClock .

Značky a konsolidace událostí

Kromě výpočtu výstupních hodnot udělá správce času při každém zaškrtnutí další práci: určuje stav jednotlivých hodin a podle potřeby vyvolává události.

I když kškrtům dochází často, je možné, že se mezi kmitáními stane spousta věcí. Například může být zastaven, spuštěn a zastaven znovu, v takovém případě se jeho ClockCurrentState hodnota třikrát změní. Teoreticky by událost mohla být vyvolána vícekrát v jednom značek. Časovací modul však konsoliduje události, aby se událost mohla zaškrtnout až CurrentStateInvalidatedCurrentStateInvalidated jednou. To platí pro všechny události časování: pro daný objekt je vyvolána nejdél jedna událost každého Clock typu.

Když přepne stav a vrátí se zpět do původního stavu mezi odškrtáky (například změna z na a zpět ClockActive na ), StoppedActive přidružená událost stále nastane.

Další informace o událostech časování najdete v tématu Přehled časovacích událostí.

Aktuální hodnoty a základní hodnoty vlastností

Vlastnost animatable může mít dvě hodnoty: základní hodnotu a aktuální hodnotu. Když nastavíte vlastnost pomocí jejího přístupového objektu CLR nebo SetValue metody , nastavíte její základní hodnotu. Pokud vlastnost není animovaná, její základní a aktuální hodnoty jsou stejné.

Při animace vlastnosti nastaví AnimationClock objekt aktuální AnimationClock vlastnosti. Načtení hodnoty vlastnosti prostřednictvím přístupového objektu CLR nebo metody vrátí výstup , když GetValueAnimationClock je nebo AnimationClockActiveFilling . Základní hodnotu vlastnosti můžete načíst pomocí GetAnimationBaseValue metody .

Viz také