Přehled chování časování

Toto téma popisuje chování časování animací a dalších Timeline objektů.

Požadavky

Pro pochopení tohoto tématu byste měli být obeznámeni se základními funkcemi animace. Další informace najdete v přehledu animace.

Typy časové osy

TimelinePředstavuje segment času. Poskytuje vlastnosti, které vám umožní určit délku tohoto segmentu, kdy by měl začít, kolikrát se bude opakovat, jak dlouho se v tomto segmentu a dalších.

Třídy, které dědí z třídy Timeline, poskytují další funkce, jako je například animace a přehrávání multimédií. WPF poskytuje následující Timeline typy.

Typ časové osy Description
AnimationTimeline Abstraktní základní třída pro Timeline objekty, které generují výstupní hodnoty pro animování vlastností.
MediaTimeline Generuje výstup z mediálního souboru.
ParallelTimeline Typ TimelineGroup , který seskupí a řídí podřízené Timeline objekty.
Storyboard Typ ParallelTimeline , který poskytuje informace o cílení pro objekty časové osy, které obsahuje.
Timeline Abstraktní základní třída, která definuje chování časování.
TimelineGroup Abstraktní třída pro Timeline objekty, které mohou obsahovat jiné Timeline objekty.

Vlastnosti, které řídí délku časové osy

TimelinePředstavuje segment času a délku časové osy lze popsat různými způsoby. Následující tabulka definuje několik podmínek pro popis délky časové osy.

Období Description Vlastnosti
Jednoduchá doba trvání Doba, po kterou časová osa trvá provedení jediného dopředné iterace. Duration
Jedno opakování Doba, po kterou časová osa trvá přehrání dopředu a v případě AutoReverse , že je vlastnost pravdivá, se přehraje zpět. Duration, AutoReverse
Aktivní období Doba, kterou časová osa potřebuje k dokončení všech opakování určených RepeatBehavior vlastností. Duration, AutoReverse, RepeatBehavior

Vlastnost Duration

Jak už jsme uvedli, časová osa představuje segment času. Délka tohoto segmentu je určena časovou osou Duration . Když časová osa dosáhne konce své doby trvání, zastaví se přehrávání. Pokud časová osa obsahuje podřízené časové osy, přestanou také hrát. V případě animace určuje, Duration Jak dlouho trvá animace přechodu od počáteční hodnoty k její konečné hodnotě. Doba trvání časové osy se někdy označuje jako Jednoduchá doba trvání, aby se lišila doba trvání jedné iterace a celková doba, kterou animace přehrává, včetně opakování. Můžete zadat dobu trvání s použitím omezené hodnoty času nebo zvláštních hodnot AutomaticForever . Doba trvání animace by se měla překládat na TimeSpan hodnotu, takže může přejít mezi hodnotami.

Následující příklad ukazuje na DoubleAnimationDuration pět sekund.

<DoubleAnimation 
  Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
  From="0" To="100" Duration="0:0:5"  />

Časové osy kontejneru, jako Storyboard jsou a ParallelTimeline , mají výchozí dobu trvání Automatic , což znamená, že se automaticky ukončí, když se jejich poslední podřízená položka přestane přehrávat. Následující příklad ukazuje Storyboard , jejichž Duration překládání na pět sekund, doba, po kterou všechny jeho podřízené DoubleAnimation objekty dokončí.

<Storyboard >

  <DoubleAnimation 
    Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
    From="0" To="100" Duration="0:0:5"  />

  <DoubleAnimation 
    Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
    From="0" To="100" Duration="0:0:3"  />

</Storyboard>

Nastavením Duration časové osy kontejneru na TimeSpan hodnotu můžete vynutit, aby se hrálo delší nebo kratší než jeho podřízené Timeline objekty. Nastavíte Duration -li na hodnotu, která je menší než délka podřízených Timeline objektů časové osy kontejneru, přestanou se podřízené Timeline objekty přehrávat při provádění časové osy kontejneru. Následující příklad nastaví DurationStoryboard z předchozích příkladů na tři sekundy. V důsledku toho první DoubleAnimation Krok přestane po třech sekundách reagovat, když má animovaný šířku obdélníku na 60.

<Storyboard Duration="0:0:3">

  <DoubleAnimation 
    Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
    From="0" To="100" Duration="0:0:5"  />

  <DoubleAnimation 
    Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
    From="0" To="100" Duration="0:0:3"  />

</Storyboard>

Vlastnost RepeatBehavior

RepeatBehaviorVlastnost Timeline ovládacího prvku určuje, kolikrát se opakuje jeho jednoduchá doba trvání. RepeatBehaviorPomocí vlastnosti můžete určit, kolikrát se má časová osa přehrávat (iterace Count ), nebo celkovou dobu, kterou by měla přehrát (opakování Duration ). V obou případech animace projde až do tolika začátku až do konce, aby bylo možné vyplnit požadovaný počet nebo dobu trvání. Ve výchozím nastavení mají časové osy počet 1.0 iterací, což znamená, že se jednou hrají a vůbec se neopakují.

V následujícím příkladu je použita RepeatBehavior vlastnost k zajištění DoubleAnimation dvojnásobku jednoduché doby trvání zadáním počtu iterací.

<DoubleAnimation 
  Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
  From="0" To="100" Duration="0:0:5" 
  RepeatBehavior="2x" />

V dalším příkladu se vlastnost používá RepeatBehavior k vytvoření DoubleAnimation hry pro polovinu jeho jednoduchého trvání.

<DoubleAnimation 
  Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
  From="0" To="100" Duration="0:0:5" 
  RepeatBehavior="0.5x" />

Pokud nastavíte RepeatBehavior vlastnost Timeline na Forever , opakuje se Timeline , dokud se nezastaví interaktivně nebo systémem časování. Následující příklad používá RepeatBehavior vlastnost k zajištění DoubleAnimation neurčitého přehrání.

<DoubleAnimation 
  Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
  From="0" To="100" Duration="0:0:5" 
  RepeatBehavior="Forever" />

Další příklad naleznete v tématu opakování animace.

Vlastnost Reverse

AutoReverseVlastnost určuje, zda Timeline bude přehrán zpět na konci každé předávací iterace. Následující příklad nastaví AutoReverse vlastnost na hodnotu DoubleAnimationtrue . v důsledku toho Animuje z nuly na 100 a potom z 100 na nulu. Hraje se celkem 10 sekund.

<DoubleAnimation 
  Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
  From="0" To="100" Duration="0:0:5" 
  AutoReverse="True" />

Použijete Count -li hodnotu k určení TimelineRepeatBehavior typu a a AutoReverse vlastnost, která Timeline je true , bude jediným opakováním sestává z jedné předávací iterace následovaná jedním zpětným iterací. Následující příklad nastaví RepeatBehaviorDoubleAnimation hodnotu z výše uvedeného příkladu na a Count na dvě. Výsledkem je to, že se DoubleAnimation hraje po dobu 20 sekund, přepošle se na pět sekund, zpětně po dobu 5 sekund, přepošle se na 5 sekund znovu a pak na pět sekund zpět.

<DoubleAnimation 
  Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
  From="0" To="100" Duration="0:0:5" 
  RepeatBehavior="2" 
  AutoReverse="True" />

Pokud má časová osa kontejneru podřízené Timeline objekty, obrátí se v případě, že má časová osa kontejneru. Další příklady naleznete v tématu určení, zda se časová osa automaticky obrátí.

Vlastnost BeginTime

BeginTimeVlastnost umožňuje určit, kdy se má časová osa spouštět. Čas zahájení časové osy je relativní vzhledem ke své nadřazené časové ose. Čas zahájení nula sekund znamená, že se časová osa začne hned po zahájení nadřazeného objektu; jakákoli jiná hodnota vytvoří posun mezi tím, kdy se spustí nadřazená časová osa, a když hraje podřízenou časovou osu. Například čas zahájení dvou sekund znamená, že se časová osa začne přehrávat, když se její nadřazená doba dosáhla dvou sekund. Ve výchozím nastavení mají všechny časové osy čas zahájení nula sekund. Můžete také nastavit čas zahájení časové osy na null , což zabrání spuštění časové osy. V jazyce WPF zadáte hodnotu null pomocí rozšíření značek x:null.

Všimněte si, že čas zahájení není aplikován při každém opakování časové osy z důvodu jeho RepeatBehavior nastavení. Pokud byste chtěli vytvořit animaci s BeginTime 10 sekundami a a RepeatBehavior z Forever , před prvním přehráním animace by došlo k prodlevě od 10 sekund, ale ne u každého úspěšného opakování. Pokud se ale nadřazená časová osa animace restartovala nebo zopakuje, dojde k prodlevě o délce 10 sekund.

BeginTimeVlastnost je užitečná pro střídavé navýšení časových os. Následující příklad vytvoří objekt Storyboard , který má dva podřízené DoubleAnimation objekty. První animace je Duration po pěti sekundách a druhá má Duration 3 sekundy. Příklad nastaví BeginTimeDoubleAnimation sekundu na 5 sekund, aby bylo zahájeno přehrávání po prvním DoubleAnimation konci.

<Storyboard>

  <DoubleAnimation 
    Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
    From="0" To="100" Duration="0:0:5" 
    BeginTime="0:0:0" />


  <DoubleAnimation 
    Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
    From="0" To="100" Duration="0:0:3"  
    BeginTime="0:0:5" />

</Storyboard>

Vlastnost FillBehavior

Když dojde Timeline k dosažení konce celkové aktivní doby trvání, FillBehavior vlastnost určuje, jestli se zastaví nebo drží poslední hodnota. Animace s FillBehaviorHoldEnd hodnotou "obsahuje" svou výstupní hodnotu: vlastnost, která je animovaná, zachovává poslední hodnotu animace. Hodnota Stop způsobí, že animace přestane mít vliv na jeho cílovou vlastnost po jeho ukončení.

Následující příklad vytvoří objekt Storyboard , který má dva podřízené DoubleAnimation objekty. Oba DoubleAnimation objekty jsou WidthRectangle animovány od 0 do 100. RectanglePrvky mají neanimované Width hodnoty 500 [pixelů nezávislé na zařízení].

<Rectangle Name="MyRectangle" 
 Width="500" Height="100"
 Opacity="1" Fill="Red">
</Rectangle>

<Rectangle Name="MyOtherRectangle" 
 Width="500" Height="100"
 Opacity="1" Fill="Orange">
</Rectangle>

<Button Content="Start FillBehavior Example">
  <Button.Triggers>
    <EventTrigger RoutedEvent="Button.Click">
      <BeginStoryboard>
        <Storyboard>
          <DoubleAnimation 
            Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
            From="0" To="100" Duration="0:0:5" 
            FillBehavior="HoldEnd" />
          <DoubleAnimation 
            Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
            From="0" To="100" Duration="0:0:5"  
            FillBehavior="Stop" />
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger>
  </Button.Triggers>
</Button>

Vlastnosti, které řídí rychlost časové osy

TimelineTřída poskytuje tři vlastnosti pro určení rychlosti:

Viz také