Compartir a través de


Información general sobre eventos de control de tiempo

Actualización: noviembre 2007

En este tema se describe cómo utilizar los cinco eventos de control de tiempo disponibles en los objetos Timeline y Clock.

Requisitos previos

Para entender este tema, debe entender cómo crear y utilizar animaciones. Para obtener una introducción a las animaciones, consulte Información general sobre animaciones.

Hay varias maneras de animar propiedades en WPF:

En los ejemplos de esta información general se utilizan objetos Storyboard porque se pueden utilizar en el marcado y en el código. Sin embargo, los conceptos descritos se pueden aplicar a los demás métodos de animación de propiedades.

¿Qué es un reloj?

Una escala de tiempo, por sí misma, realmente no hace nada más que describir un segmento de tiempo. En realidad, es el objeto Clock de la escala de tiempo el que realiza el trabajo: en tiempo de ejecución, mantiene el estado de la escala de tiempo relacionado con el control de tiempo. En la mayoría de los casos, como cuando se utilizan guiones gráficos, se crea automáticamente un reloj para la escala de tiempo. También puede crear un objeto Clock explícitamente mediante el método CreateClock. Para obtener más información acerca de los objetos Clock, consulte Información general sobre sistemas de temporización y animación.

¿Por qué se utilizan eventos?

Con la excepción de una (la búsqueda alineada con el último paso), todas las operaciones de control de tiempo interactivas son asincrónicas. No hay ninguna manera de saber exactamente cuándo se ejecutarán. Esto puede constituir un problema cuando hay otro código que depende de la operación de control de tiempo. Supongamos que desea detener una escala de tiempo que anima un rectángulo. Después de que la escala de tiempo se detiene, se cambia el color del rectángulo.

myStoryboard.Stop(myRectangle);

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

En el ejemplo anterior, la segunda línea de código podría ejecutarse antes de que se detenga el guión gráfico. Esto se debe a que la detención es una operación asincrónica. Al indicar a una escala de tiempo o reloj que se detenga, se crea una especie de "solicitud de detención" que no se procesa hasta el siguiente paso del motor de control de tiempo.

Para ejecutar los comandos después de que se haya completado una escala de tiempo, se utilizan eventos de control de tiempo. En el ejemplo siguiente, se utiliza un controlador de eventos para cambiar el color de un rectángulo después de que se detenga la reproducción del guión gráfico.

// 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;
    }
}


...


// Register for the CurrentStateInvalidated timing event.
myStoryboard.CurrentStateInvalidated += new EventHandler(myStoryboard_CurrentStateInvalidated);

Para obtener un ejemplo más completo, vea Cómo: Recibir una notificación cuando cambia el estado de un reloj.

Eventos públicos

Las clases Timeline y Clock proporcionan cinco eventos de control de tiempo. En la tabla siguiente se muestra una lista de estos eventos y de las condiciones que los activan.

Evento

Operación interactiva desencadenante

Otros desencadenadores

Completada

Omitir hasta completar

El reloj se completa.

CurrentGlobalSpeedInvalidated

Poner en pausa, reanudar, buscar, establecer porcentaje de velocidad, omitir hasta completar, detener

El reloj se invierte, acelera, inicia o pone en pausa.

CurrentStateInvalidated

Comenzar, omitir hasta completar, detener

El reloj se inicia, detiene o completa.

CurrentTimeInvalidated

Comenzar, buscar, omitir hasta completar, detener

El reloj progresa.

RemoveRequested

Quitar

Pasos y consolidación de eventos

Al animar objetos en WPF, el motor de control de tiempo se encarga de administrar las animaciones. El motor de control de tiempo realiza el seguimiento de la progresión de tiempo y calcula el estado de cada animación. Realiza muchas de estos pasos de evaluación en un segundo. Estos pasos de evaluación se denominan "pasos."

Aunque los pasos se producen con frecuencia, pueden ocurrir muchas cosas entre ellos. Por ejemplo, una escala de tiempo se podría detener, iniciar y detener de nuevo, en cuyo caso su estado actual habría cambiado tres veces. En teoría, el evento se podría provocar varias veces en un mismo paso; sin embargo, el motor de control de tiempo consolida los eventos, para que cada uno de ellos se pueda provocar, como máximo, una vez por paso.

Registrarse para eventos

Hay dos maneras de efectuar el registro para los eventos de control de tiempo: se puede realizar con la escala de tiempo o con el reloj creado a partir de ella. Registrarse directamente para un evento con un reloj es bastante sencillo, aunque sólo se puede hacer mediante código. Si utiliza una escala de tiempo, puede realizar el registro para los eventos mediante marcado o código. En la sección siguiente se describe cómo registrarse para los eventos de reloj con una escala de tiempo.

Registrarse para los eventos de reloj con una escala de tiempo

Aunque los eventos Completed, CurrentGlobalSpeedInvalidated, CurrentStateInvalidated, CurrentTimeInvalidated y RemoveRequested de una escala de tiempo parecen estar asociados a la escala de tiempo, al registrarse para estos eventos, en realidad, se asocia un controlador de eventos al Clock creado para ella.

Al registrarse para el evento Completed en una escala de tiempo, por ejemplo, en realidad está indicando al sistema que se registre para el evento Completed de cada reloj que se cree para la escala de tiempo. En el código, el registro para este evento se debe efectuar antes de que se cree el Clock para esta escala de tiempo; de lo contrario, no recibirá la notificación. Esto sucede automáticamente en XAML; el analizador efectúa automáticamente el registro para el evento antes de que se cree el Clock.

Vea también

Conceptos

Información general sobre sistemas de temporización y animación

Información general sobre animaciones

Información general sobre comportamientos de control de tiempo

Otros recursos

Ejemplos Animation and Timing