Condividi tramite


Panoramica dei comportamenti di sincronizzazione

In questo argomento vengono descritti i comportamenti temporali delle animazioni e di altri Timeline oggetti.

Prerequisiti

Per comprendere questo argomento, è necessario avere familiarità con le funzionalità di animazione di base. Per altre informazioni, vedere Cenni preliminari sull'animazione.

Tipi di sequenza temporale

Un Timeline oggetto rappresenta un segmento di tempo. Fornisce proprietà che consentono di specificare la lunghezza del segmento, quando deve iniziare, il numero di volte in cui si ripete, il tempo di avanzamento rapido in tale segmento e altro ancora.

Le classi che ereditano dalla classe sequenza temporale forniscono funzionalità aggiuntive, ad esempio animazione e riproduzione multimediale. WPF fornisce i tipi seguenti Timeline .

Tipo di sequenza temporale Descrizione
AnimationTimeline Classe base astratta per gli oggetti Timeline che generano valori di output per animare le proprietà.
MediaTimeline Genera l'output da un file di contenuti multimediali.
ParallelTimeline Un tipo di TimelineGroup che raggruppa e controlla gli oggetti Timeline figli.
Storyboard Un tipo di ParallelTimeline che fornisce informazioni di destinazione per gli oggetti Timeline in esso contenuti.
Timeline Classe base astratta che definisce i comportamenti temporali.
TimelineGroup Classe astratta per Timeline gli oggetti che possono contenere altri Timeline oggetti.

Proprietà che controllano la lunghezza di una sequenza temporale

Un Timeline oggetto rappresenta un segmento di tempo e la lunghezza di una sequenza temporale può essere descritta in modi diversi. La tabella seguente definisce diversi termini per descrivere la lunghezza di una sequenza temporale.

Termine Descrizione Proprietà
Durata semplice Periodo di tempo impiegato da una sequenza temporale per eseguire una singola iterazione in avanti. Duration
Una ripetizione Il tempo necessario affinché una sequenza temporale venga riprodotta in avanti una volta e, se la proprietà AutoReverse è true, all'indietro una volta. Duration, AutoReverse
Periodo attivo La durata di tempo necessaria affinché una sequenza temporale completi tutte le ripetizioni specificate dalla sua proprietà RepeatBehavior. Duration, AutoReverse, RepeatBehavior

Proprietà Duration

Come accennato in precedenza, una sequenza temporale rappresenta un intervallo di tempo. La lunghezza di quel segmento è determinata dal cursore della sequenza temporale.Duration Quando una sequenza temporale raggiunge la fine della durata, smette di giocare. Se la sequenza temporale ha sequenze temporali figlio, smette di giocare. Nel caso di un'animazione, il Duration specifica per quanto tempo l'animazione richiede per passare dal valore iniziale al valore finale. La durata di una sequenza temporale viene talvolta definita durata semplice, per distinguere tra la durata di una singola iterazione e il tempo totale di riproduzione dell'animazione, incluse le ripetizioni. È possibile specificare una durata usando un valore temporale finito o i valori Automatic speciali o Forever. La durata di un'animazione deve essere risolta in un TimeSpan valore, in modo che possa passare da un valore all'altro.

Nell'esempio seguente si mostra un DoubleAnimation con un Duration di cinque secondi.

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

Le sequenze temporali dei contenitori, ad esempio Storyboard e ParallelTimeline, hanno una durata predefinita di Automatic, il che significa che terminano automaticamente quando l'ultimo figlio smette di giocare. Nell'esempio seguente viene illustrato un Storyboard il cui Duration si risolve in cinque secondi, cioè il tempo necessario affinché tutti i suoi oggetti figlio DoubleAnimation completino.

<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>

Impostando la Duration sequenza temporale di un contenitore su un TimeSpan valore, puoi forzare una riproduzione più lunga o più breve rispetto a quella degli oggetti figlio Timeline. Se si imposta il Duration a un valore inferiore alla lunghezza degli oggetti figlio della sequenza temporale del contenitore, gli oggetti figlio TimelineTimeline smettono di funzionare quando la sequenza temporale del contenitore viene interrotta. Nell'esempio seguente, viene impostato il Duration del Storyboard degli esempi precedenti a tre secondi. Di conseguenza, il primo DoubleAnimation interrompe l'avanzamento dopo tre secondi, quando ha animato la larghezza del rettangolo di destinazione a 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>

La proprietà RepeatBehavior

La RepeatBehavior proprietà di un Timeline controlla il numero di volte in cui ripete la durata semplice. Usando la RepeatBehavior proprietà , è possibile specificare quante volte viene riprodotta la sequenza temporale (un'iterazione Count) o il periodo totale di tempo che deve essere riprodotto (una ripetizione Duration). In entrambi i casi, l'animazione passa attraverso quante più esecuzioni complete necessarie per soddisfare il conteggio o la durata richiesti. Per impostazione predefinita, le sequenze temporali hanno un numero di iterazioni di 1.0, il che significa che giocano una sola volta e non si ripetono affatto.

Nell'esempio seguente viene utilizzata la RepeatBehavior proprietà per eseguire un DoubleAnimation gioco per due volte la durata semplice specificando un conteggio di iterazioni.

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

Nell'esempio seguente viene utilizzata la proprietà RepeatBehavior per far riprodurre DoubleAnimation per metà della durata totale.

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

Se si imposta la proprietà RepeatBehavior di Timeline su Forever, Timeline si ripete fino a quando non viene arrestata manualmente o dal sistema di temporizzazione. Nell'esempio seguente, la proprietà RepeatBehavior viene utilizzata per fare in modo che la riproduzione DoubleAnimation continui illimitatamente.

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

Per un esempio aggiuntivo, vedi Ripetere un'animazione.

Proprietà AutoReverse

La AutoReverse proprietà specifica se un Timeline verrà riprodotto all'indietro alla fine di ogni iterazione in avanti. Nell'esempio seguente viene impostata la AutoReverse proprietà di un DoubleAnimation oggetto su true. Di conseguenza, viene animata da zero a 100 e quindi da 100 a zero. Viene riprodotto per un totale di 10 secondi.

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

Quando si usa un Count valore per specificare l'oggetto RepeatBehavior di e Timeline la AutoReverse proprietà di , Timelinetrueuna singola ripetizione è costituita da un'iterazione avanti seguita da un'iterazione all'indietro. Nell'esempio seguente l'oggetto RepeatBehaviorDoubleAnimation dell'esempio precedente viene impostato su un Count valore pari a due. Di conseguenza, viene DoubleAnimation riprodotto per 20 secondi: avanti per cinque secondi, indietro per cinque secondi, avanti per cinque secondi e quindi indietro per cinque secondi.

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

Se una sequenza temporale del contenitore include oggetti figlio Timeline, essi invertono quando viene eseguita la sequenza temporale del contenitore. Per altri esempi, vedere Specificare se una sequenza temporale inverte automaticamente.

La proprietà BeginTime

La BeginTime proprietà consente di specificare quando inizia una sequenza temporale. Il tempo di inizio di una sequenza temporale è relativo alla sequenza temporale padre. Un tempo di inizio di zero secondi indica che la sequenza temporale viene avviata quando l'elemento padre inizia; qualsiasi altro valore crea un offset tra l'inizio della riproduzione della sequenza temporale padre e della sequenza temporale figlio. Ad esempio, un'ora di inizio di due secondi indica che la sequenza temporale inizia a giocare quando il padre ha raggiunto un tempo di due secondi. Per impostazione predefinita, tutte le sequenze temporali hanno un'ora di inizio pari a zero secondi. È anche possibile impostare l'ora di inizio di una sequenza temporale su null, che impedisce l'avvio della sequenza temporale. In WPF, si specifica null usando l'estensione di markup x:Null.

Si noti che l'ora di inizio non viene applicata ogni volta che una sequenza temporale viene ripetuta a causa dell'impostazione RepeatBehavior . Se si dovesse creare un'animazione con una durata di BeginTime di 10 secondi e un intervallo di RepeatBehavior, ci sarebbe un ritardo di 10 secondi prima che l'animazione venga eseguita per la prima volta, ma non per ogni ripetizione successiva. Tuttavia, se la sequenza temporale padre dell'animazione dovesse essere riavviata o ripetuta, si verificherebbe il ritardo di 10 secondi.

La BeginTime proprietà è utile per sfalsare le sequenze temporali. Nell'esempio seguente viene creato un oggetto Storyboard con due oggetti figlio DoubleAnimation . La prima animazione ha un Duration valore di cinque secondi e la seconda ha un Duration valore di 3 secondi. Nell'esempio viene impostato il BeginTime del secondo DoubleAnimation su 5 secondi, così che inizi a suonare dopo che il primo DoubleAnimation termina.

<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>

Proprietà di FillBehavior

Quando un oggetto Timeline raggiunge la fine della durata attiva totale, la FillBehavior proprietà specifica se si arresta o mantiene l'ultimo valore. Un'animazione con un FillBehavior di HoldEnd "mantiene" il suo valore di output: la proprietà interessata dall'animazione conserva l'ultimo valore dell'animazione. Un valore di Stop fa sì che l'animazione smetta di influenzare la proprietà di destinazione una volta terminata.

Nell'esempio seguente viene creato un oggetto Storyboard con due oggetti figlio DoubleAnimation . Entrambi gli oggetti DoubleAnimation animano il Width di un Rectangle da 0 a 100. Gli Rectangle elementi hanno valori non animati Width di 500 [pixel indipendenti dal dispositivo].

<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>

Proprietà che controllano la velocità di una sequenza temporale

La Timeline classe fornisce tre proprietà per specificarne la velocità:

Vedere anche