Compartir a través de


Información general sobre los comportamientos de control de tiempo

En este tema se describen los comportamientos de tiempo de las animaciones y otros Timeline objetos.

Prerrequisitos

Para comprender este tema, debe estar familiarizado con las características básicas de animación. Para obtener más información, vea Información general sobre animaciones.

Tipos de escala de tiempo

Timeline representa un segmento de tiempo. Proporciona propiedades que permiten especificar la longitud de ese segmento, cuándo se debe iniciar, cuántas veces se repetirá, el tiempo rápido que avanza en ese segmento, etc.

Las clases que heredan de la clase de escala de tiempo proporcionan funcionalidad adicional, como la animación y la reproducción multimedia. WPF proporciona los siguientes Timeline tipos.

Tipo de línea de tiempo Descripción
AnimationTimeline Clase base abstracta para Timeline objetos que generan valores de salida para animar propiedades.
MediaTimeline Genera la salida de un archivo multimedia.
ParallelTimeline Un tipo de TimelineGroup que agrupa y controla los objetos secundarios Timeline.
Storyboard Tipo de ParallelTimeline que proporciona información de destino para los objetos Timeline que contiene.
Timeline Clase base abstracta que define comportamientos de control de tiempo.
TimelineGroup Clase abstracta para Timeline objetos que pueden contener otros Timeline objetos.

Propiedades que controlan la longitud de una escala de tiempo

Timeline representa un segmento de tiempo y la longitud de una escala de tiempo se puede describir de diferentes maneras. En la tabla siguiente se definen varios términos para describir la longitud de una escala de tiempo.

Término Descripción Propiedades
Duración simple La duración que toma una línea de tiempo para completar una única iteración hacia adelante. Duration
Una repetición El tiempo necesario para que una línea de tiempo se reproduzca una vez y, si la propiedad AutoReverse es verdadero, se reproduzca hacia atrás una vez. Duration, AutoReverse
Período activo El tiempo que tarda una línea de tiempo en completar todas las repeticiones especificadas por la propiedad del RepeatBehavior. Duration, , AutoReverse, RepeatBehavior

La propiedad Duración

Como se mencionó anteriormente, una escala de tiempo representa un segmento de tiempo. La longitud de ese segmento viene determinada por la línea de tiempo.Duration Cuando una línea de tiempo alcanza el final de su duración, se detiene. Si la escala de tiempo tiene escalas de tiempo secundarias, también dejan de jugar. En el caso de una animación, Duration especifica cuánto tiempo tarda la animación en pasar de su valor inicial a su valor final. A veces, la duración de una escala de tiempo se denomina duración simple, para distinguir entre la duración de una sola iteración y el tiempo total durante el que se reproduce la animación, incluidas las repeticiones. Puede especificar una duración mediante un valor de tiempo finito o los valores Automatic especiales o Forever. La duración de una animación debe resolverse en un TimeSpan valor, por lo que puede realizar la transición entre valores.

En el ejemplo siguiente se muestra un DoubleAnimation con un Duration de cinco segundos.

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

Las escalas de tiempo del contenedor, como Storyboard y ParallelTimeline, tienen una duración predeterminada de , lo que significa que terminan automáticamente cuando su último elemento secundario deja de Automaticjugar. En el ejemplo siguiente se muestra un Storyboard cuya Duration resolución se traduce a cinco segundos, el tiempo que tardan todos sus objetos DoubleAnimation secundarios en completarse.

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

Al establecer la Duration de una escala de tiempo de contenedor en un TimeSpan valor, puede forzar una reproducción más larga o más corta de lo que sus objetos secundarios Timeline reproducirían. Si establece Duration en un valor menor que la longitud de los objetos secundarios Timeline de la línea de tiempo del contenedor, los objetos secundarios Timeline dejan de reproducirse cuando la línea de tiempo del contenedor se detiene. En el ejemplo siguiente se establece el Duration de los Storyboard ejemplos anteriores en tres segundos. Como resultado, la primera DoubleAnimation deja de progresar a los tres segundos, tras haber animado el ancho del rectángulo de destino a 60 píxeles.

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

La RepeatBehavior propiedad de un Timeline controla cuántas veces repite su duración simple. Con la RepeatBehavior propiedad, puede especificar cuántas veces se reproduce la línea de tiempo (una iteración Count) o el período total de tiempo que debe reproducirse (una repetición Duration). En cualquier caso, la animación pasa por tantas ejecuciones de principio a fin como sea necesario para rellenar el recuento o la duración solicitados. De forma predeterminada, las escalas de tiempo tienen un recuento de iteración de 1.0, lo que significa que se reproducen una vez y no se repiten en absoluto.

En el ejemplo siguiente se usa la RepeatBehavior propiedad para hacer que una DoubleAnimation reproducción dure el doble de su duración simple especificando un recuento de iteraciones.

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

En el siguiente ejemplo se utiliza la propiedad RepeatBehavior para que el DoubleAnimation se reproduzca durante la mitad de su duración total sencilla.

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

Si establece la RepeatBehavior propiedad de un Timeline a Forever, Timeline se repite hasta que se detiene de manera interactiva o por el sistema de control de tiempo. En el ejemplo siguiente se usa la RepeatBehavior propiedad para hacer que DoubleAnimation se ejecute indefinidamente.

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

Para obtener un ejemplo adicional, vea Repetir una animación.

La propiedad AutoReverse

La AutoReverse propiedad especifica si Timeline se reproducirá al revés al final de cada iteración hacia adelante. En el ejemplo siguiente se establece la AutoReverse propiedad de un DoubleAnimation a true; como resultado, se anima de cero a 100, y luego de 100 a cero. Se reproduce durante un total de 10 segundos.

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

Cuando se usa un Count valor para especificar el RepeatBehavior de un Timeline y la AutoReverse propiedad de ese Timeline es true, una sola repetición consta de una iteración hacia adelante seguida de una iteración hacia atrás. En el siguiente ejemplo se establece el RepeatBehavior del DoubleAnimation del ejemplo anterior en un Count de dos. Como resultado, se DoubleAnimation reproduce durante 20 segundos: hacia delante durante cinco segundos, hacia atrás durante cinco segundos, hacia delante durante cinco segundos de nuevo y, a continuación, hacia atrás durante cinco segundos de nuevo.

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

Si una línea de tiempo de contenedor tiene objetos secundarios Timeline, estos se invierten cuando lo hace la línea de tiempo del contenedor. Para obtener ejemplos adicionales, vea Especificar si una línea de tiempo se invierte automáticamente.

La propiedad BeginTime

La BeginTime propiedad permite especificar cuándo se inicia una línea de tiempo. La hora de inicio de una escala de tiempo es relativa a su escala de tiempo primaria. Un tiempo de inicio de cero segundos significa que la línea de tiempo se inicia tan pronto como comienza la línea de tiempo principal; cualquier otro valor crea un desplazamiento entre cuando la línea de tiempo principal comienza a reproducirse y cuando se reproduce la línea de tiempo secundaria. Por ejemplo, un tiempo de inicio de dos segundos significa que la línea de tiempo comienza a funcionar cuando su elemento primario ha alcanzado un tiempo de dos segundos. De forma predeterminada, todas las escalas de tiempo tienen un tiempo de inicio de cero segundos. También puede establecer la hora de inicio de una escala de tiempo en null, lo que impide que se inicie la escala de tiempo. En WPF, especifique null mediante la extensión de marcado x:Null.

Tenga en cuenta que la hora de inicio no se aplica cada vez que se repite una escala de tiempo debido a su RepeatBehavior configuración. Si fueras a crear una animación con un BeginTime de 10 segundos y un RepeatBehavior de Forever, habría un retraso de 10 segundos antes de que la animación se reproducira por primera vez, pero no para cada repetición sucesiva. Sin embargo, si la escala de tiempo principal de la animación se reiniciara o repetira, se produciría el retraso de 10 segundos.

La BeginTime propiedad es útil para escalonar líneas de tiempo. En el ejemplo siguiente se crea un objeto Storyboard que tiene dos objetos secundarios DoubleAnimation . La primera animación tiene un Duration valor de cinco segundos y la segunda tiene un Duration valor de 3 segundos. En el ejemplo se establece el BeginTime valor del segundo DoubleAnimation en 5 segundos, de modo que comience a reproducirse después de que finalice el primer DoubleAnimation .

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

La propiedad FillBehavior

Cuando un Timeline alcanza el final de su duración activa total, la FillBehavior propiedad especifica si detiene o mantiene su último valor. Una animación con un FillBehavior de HoldEnd "mantiene" su valor de salida: la propiedad animada conserva el último valor de la animación. Un valor de Stop hace que, tras finalizar, la animación deje de afectar a su propiedad de destino.

En el ejemplo siguiente se crea un objeto Storyboard que tiene dos objetos secundarios DoubleAnimation . Ambos DoubleAnimation objetos realizan la animación del Width de un Rectangle desde 0 hasta 100. Los Rectangle elementos tienen valores no animados Width de 500 [píxeles independientes del 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>

Propiedades que controlan la velocidad de una línea de tiempo

La Timeline clase proporciona tres propiedades para especificar su velocidad:

Consulte también