Sdílet prostřednictvím


Přehled časových událostí

Toto téma popisuje, jak používat pět událostí časování dostupných u objektů Timeline a Clock.

Požadavky

Abyste pochopili toto téma, měli byste vědět, jak vytvářet a používat animace. Pokud chcete začít s animací, přečtěte si přehled animací.

Vlastnosti ve WPF můžete animovat několika způsoby:

Protože je můžete použít ve značkách a kódu, příklady v tomto přehledu používají Storyboard objekty. Popisované koncepty se ale dají použít na jiné metody animace vlastností.

Co je hodina?

Časová osa sama o sobě ve skutečnosti nedělá nic jiného, než popisuje segment času. Jedná se o objekt Clock časové osy, který dělá skutečnou práci: udržuje stav běhu související s časováním časové osy. Ve většině případů, například při použití nákresů scén, se pro časovou osu automaticky vytvoří časovač. Můžete také vytvořit Clock explicitně pomocí CreateClock metody. Další informace o Clock objektech naleznete v přehledu systému animace a časování .

Proč používat události?

S výjimkou jedné (hledání v souladu s posledním zaškrtnutím) jsou všechny interaktivní operace časování asynchronní. Neexistuje způsob, jak přesně vědět, kdy budou vykonány. To může být problém, pokud máte jiný kód, který závisí na operaci časování. Předpokládejme, že chcete zastavit časovou osu, která animuje obdélník. Po zastavení časové osy změníte barvu obdélníku.

myStoryboard.Stop(myRectangle);

// This statement might execute
// before the storyboard has stopped.
myRectangle.Fill = Brushes.Blue;
myStoryboard.Stop(myRectangle)

' This statement might execute
' before the storyboard has stopped.
myRectangle.Fill = Brushes.Blue

V předchozím příkladu se druhý řádek kódu může spustit před zastavením scénáře. To je proto, že zastavení je asynchronní operace. Když pokynete časové ose nebo hodinám, aby se zastavily, vytvoří se jakýsi "požadavek na zastavení", který se nezpracuje, dokud časový modul nezpracuje další takt.

Pokud chcete po dokončení časové osy spouštět příkazy, použijte časové události. V následujícím příkladu se obslužná rutina události používá ke změně barvy obdélníku po zastavení přehrávání scénáře.

// Register for the CurrentStateInvalidated timing event.
myStoryboard.CurrentStateInvalidated += new EventHandler(myStoryboard_CurrentStateInvalidated);
' Register for the CurrentStateInvalidated timing event.
AddHandler myStoryboard.CurrentStateInvalidated, AddressOf myStoryboard_CurrentStateInvalidated
// Change the rectangle's color after the storyboard stops.
void myStoryboard_CurrentStateInvalidated(object sender, EventArgs e)
{
    Clock myStoryboardClock = (Clock)sender;
    if (myStoryboardClock.CurrentState == ClockState.Stopped)
    {
        myRectangle.Fill = Brushes.Blue;
    }
}
' Change the rectangle's color after the storyboard stops. 
Private Sub myStoryboard_CurrentStateInvalidated(ByVal sender As Object, ByVal e As EventArgs)
    Dim myStoryboardClock As Clock = CType(sender, Clock)
    If myStoryboardClock.CurrentState = ClockState.Stopped Then
        myRectangle.Fill = Brushes.Blue
    End If
End Sub

Pro podrobnější příklad viz Oznámení o změně stavu hodin.

Veřejné události

Třídy Timeline i Clock poskytují pět časových událostí. Následující tabulka uvádí tyto události a podmínky, které je aktivují.

Událost Aktivace interaktivní operace Další triggery
Dokončeno Přeskočit na vyplnění Hodiny se dokončí.
Aktuální globální rychlost zneplatněna Pozastavení, obnovení, hledání, nastavení poměru rychlosti, přeskočení na výplň, zastavení Hodiny se otočí, urychlí, spustí nebo zastaví.
SoučasnýStavNeplatný Začněte, přeskočte k vyplnění, zastavte Hodiny se spouštějí, zastavují nebo zaplňují.
AktuálníČasNeplatný Začít, hledat, přeskočit k vyplnění, zastavit Hodiny postupují.
OdebráníPožadováno Odstranit

Odpočítávání a konsolidace událostí

Když animujete objekty ve WPF, je to časovací modul, který spravuje vaše animace. Časovací modul sleduje průběh času a vypočítá stav jednotlivých animací. Provede spoustu takových vyhodnocení za sekundu. Tyto zkušební průchody se označují jako "ticks".

Zatímco klíšťata se vyskytují často, je možné, že se mezi klíšťaty stane spousta věcí. Například časová osa může být zastavena, spuštěna a zastavena znovu, v takovém případě se její aktuální stav třikrát změní. Teoreticky by událost mohla být vyvolána vícekrát během jediného tiknutí; časovací modul však konsoliduje události tak, že každá událost může být vyvolána maximálně jednou za tik.

Registrace událostí

Události časování se dají zaregistrovat dvěma způsoby: můžete se zaregistrovat na časové ose nebo pomocí hodin vytvořených z časové osy. Registrace události přímo pomocí hodin je poměrně jednoduchá, i když ji lze provést pouze z kódu. Můžete se registrovat na události s časovou osou z markupů nebo kódu. Další část popisuje, jak zaregistrovat časové události s časovou osou.

Registrace událostí hodin na časové ose

I když se události Completed, CurrentGlobalSpeedInvalidated, CurrentStateInvalidated, CurrentTimeInvalidateda RemoveRequested jeví jako přidružené k časové ose, registrace na tyto události ve skutečnosti přidruží obslužný mechanismus události k Clock, který byl vytvořen pro časovou osu.

Když se zaregistrujete na událost Completed na časové ose, například vlastně říkáte systému, aby zaregistroval událost Completed pro každou hodinu vytvořenou pro časovou osu. V kódu je nutné zaregistrovat tuto událost před vytvořením Clock pro tuto časovou osu; jinak nebudete dostávat oznámení. K tomu dochází automaticky v XAML; analyzátor automaticky zaregistruje událost před vytvořením Clock.

Viz také

  • Přehled systému animace a časování
  • Přehled animací
  • Přehled časovacího chování