Megosztás a következőn keresztül:


Animáció és időzítési rendszer áttekintése

Ez a témakör azt ismerteti, hogy az időzítési rendszer hogyan használja az animációt, Timelineés Clock osztályokat a tulajdonságok animálásához.

Előfeltételek

A témakör megértéséhez WPF-animációkat kell használnia a tulajdonságok animálásához, az Animáció áttekintésecímű cikkben leírtak szerint. Segít a függőségi tulajdonságok megismerésében is; további információt a Függőség tulajdonságainak áttekintésecímű témakörben talál.

Ütemtervek és órajelek

Az animáció áttekintése leírta, hogy egy Timeline hogyan jelöl egy időszakaszt, és az animáció olyan Timeline, amely kimeneti értékeket állít elő. A Timelineönmagában nem tesz mást, mint csupán az idő egy szegmensét írja le. Ez az ütemterv Clock objektuma, amely elvégzi a valódi munkát. Ugyanígy, az animáció valójában nem tulajdonságokat animál: egy animációs osztály leírja, hogyan kell kiszámítani a kimeneti értékeket, de az animációhoz létrehozott Clock az, amely meghajtja az animáció kimenetét, és alkalmazza azt a tulajdonságokra.

A Clock egy speciális objektumtípus, amely az Timelineidőzítéssel kapcsolatos futásidejű állapotát tartja fenn. Ez három bitnyi információt biztosít, amelyek elengedhetetlenek az animációs és időzítési rendszerhez: CurrentTime, CurrentProgressés CurrentState. A Clock a Timelineáltal leírt időzítési viselkedések használatával határozza meg az aktuális időt, a haladást és az állapotot: Duration, RepeatBehavior, AutoReversestb.

A legtöbb esetben automatikusan létrejön egy Clock az ütemtervhez. Ha egy Storyboard vagy a BeginAnimation módszerrel animál, a rendszer automatikusan létrehozza az időzítőket az idővonalakhoz és animációkhoz, és alkalmazza őket a megcélzott tulajdonságokra. Az ön ClockCreateClock módszerével explicit módon is létrehozhat egy Timeline-t. A MediaTimeline.CreateClock metódus az általa meghívott Timeline számára megfelelő típusú órát hozza létre. Ha a Timeline gyermek ütemterveket tartalmaz, Clock objektumokat is létrehoz számukra. Az eredményként kapott Clock objektumok olyan fákba vannak rendezve, amelyek megfelelnek annak a Timeline objektumfának a szerkezetében, amelyből létrehozták őket.

A különböző típusú idősorokhoz különböző típusú órák tartoznak. Az alábbi táblázat a különböző Clock típusoknak megfelelő Timeline típusokat mutatja be.

Ütemterv típusa Óra típusa Óra célja
Animáció (a AnimationTimeline-ból származik) AnimationClock Kimeneti értékeket hoz létre egy függőségi tulajdonsághoz.
MediaTimeline MediaClock Médiafájlt dolgoz fel.
ParallelTimeline ClockGroup A Clock gyermek objektumainak csoportosítása és vezérlése
Storyboard ClockGroup A Clock gyermek objektumainak csoportosítása és vezérlése

A AnimationClock metódussal bármilyen ApplyAnimationClock létrehozott objektumot alkalmazhat kompatibilis függőségi tulajdonságokra.

A teljesítményigényes forgatókönyvekben, például nagy mennyiségű hasonló objektum animálása esetén a saját Clock használata teljesítményelőnyöket nyújthat.

Óra és az Időkezelő

Amikor a WPF-ben animálja az objektumokat, az Időkezelő kezeli az ütemtervekhez létrehozott Clock objektumokat. Az időkezelő az Clock objektumok fájának gyökere, és szabályozza a fa időáramlását. A rendszer automatikusan létrehoz egy időkezelőt minden WPF-alkalmazáshoz, és láthatatlan az alkalmazás fejlesztője számára. Az időmérő másodpercenként többször "ketyeg"; az egy másodperc alatt bekövetkező ütemek tényleges száma a rendelkezésre álló rendszererőforrásoktól függően változik. Az időkezelő az időzítési fa minden egyes ütése során kiszámítja az időzítési fában lévő összes ActiveClock objektum állapotát.

Az alábbi ábra az időkezelő és a AnimationClockés egy animált függőségi tulajdonság közötti kapcsolatot mutatja be.

időzítési rendszer összetevőit és az időkezelőt.
Tulajdonság animálása

Amikor az időkezelő kipipál, az alkalmazás minden ActiveClock idejét frissíti. Ha a Clock egy AnimationClock, akkor az a GetCurrentValue-ból, amiből létrejött, a AnimationTimeline módszer segítségével számítja ki az aktuális kimeneti értékét. A AnimationClock a AnimationTimeline-nek biztosítja az aktuális helyi időt, egy bemeneti értéket, amely általában a tulajdonság alapértéke, és egy alapértelmezett célértéket. Ha a GetValue metódust vagy annak CLR-hozzáférőjét használja egy tulajdonság által animált érték lekérésére, megkapja a AnimationClockkimenetét.

Óracsoportok

Az előző szakasz azt ismertette, hogy különböző típusú Clock objektumok léteznek a különböző idősortípusokhoz. Az alábbi ábra az időkezelő, egy ClockGroup, egy AnimationClockés egy animált függőségi tulajdonság közötti kapcsolatot mutatja be. A ClockGroup azért van létrehozva, hogy olyan idősorokat csoportosítson, mint a Storyboard osztály, amely animációkat és más idősorokat képes csoportosítani.

Idő menedzserrel és függőségi tulajdonságokkal rendelkező időzítési rendszerösszetevők.
Óracsoport

Kompozíció

Több órát is társíthat egyetlen tulajdonsághoz, ebben az esetben minden óra az előző óra kimeneti értékét használja alapértékként. Az alábbi ábra három AnimationClock objektumot mutat be ugyanarra a tulajdonságra alkalmazva. A Clock1 az animált tulajdonság alapértékét használja bemenetként, és kimenet létrehozásához. A Clock2 az 1. óra kimenetét használja bemenetként, és a kimenet létrehozásához használja. A Clock3 a Clock2 kimenetét használja bemenetként, és a kimenet létrehozásához használja. Ha egyszerre több óra is befolyásolja ugyanazt a tulajdonságot, azt mondják, hogy egy összeállítási láncban vannak.

Több függőségi tulajdonsággal rendelkező időzítő rendszer összetevői.
Kompozíciós lánc

Vegye figyelembe, hogy bár az összeállítási láncban lévő AnimationClock objektumok bemenete és kimenete között kapcsolat jön létre, az időzítési viselkedésüket nem befolyásolja; Clock objektumok (beleértve AnimationClock objektumokat is) hierarchikus függőségben vannak a szülő Clock objektumoktól.

Ha több időzítőt szeretne ugyanarra a tulajdonságra alkalmazni, használja a ComposeHandoffBehavior egy Storyboard, animáció vagy AnimationClockalkalmazásakor.

Kullancsok és események összevonása

A kimeneti értékek kiszámítása mellett az időmérő minden alkalommal más munkát végez, amikor jelez: meghatározza az egyes órák állapotát, és szükség szerint eseményeket indít el.

Bár a kullancsok gyakran fordulnak elő, sok dolog történhet a kullancsok között. Előfordulhat például, hogy egy Clock-t leállítanak, elindítanak majd újra leállítanak, amely esetben a CurrentState értéke háromszor megváltozik. Elméletileg a CurrentStateInvalidated esemény egyetlen ciklusban többször is előfordulhat; az időzítési motor azonban összevonja az eseményeket, így a CurrentStateInvalidated esemény legfeljebb egyszer fordulhat elő ciklusonként. Ez minden időzítési eseményre igaz: egy adott Clock objektumhoz legfeljebb egy-egy eseményt emelünk ki.

Ha egy Clock állapotot vált, és visszaáll az eredeti állapotára a osztásjelek között (például Active-ról Stopped-ra vált, és visszavált Active), a kapcsolódó esemény továbbra is bekövetkezik.

Az időzítési eseményekről további információt az Időzítési események áttekintésecímű témakörben talál.

A tulajdonságok aktuális értékei és alapértékei

Az animálható tulajdonságnak két értéke lehet: egy alapérték és egy aktuális érték. Ha a tulajdonságot a CLR-tartozék vagy a SetValue metódus használatával állítja be, az alapértéket kell megadnia. Ha egy tulajdonság nincs animálva, az alapértékek és az aktuális értékek megegyeznek.

Tulajdonság animálásakor a AnimationClock beállítja a tulajdonság aktuális értékét. A tulajdonság értékének a CLR-tartozékon vagy a GetValue metóduson keresztül történő beolvasása a AnimationClock kimenetét adja vissza, ha a AnimationClockActive vagy Filling. A GetAnimationBaseValue metódussal lekérheti a tulajdonság alapértékét.

Lásd még