Información general sobre sistemas de temporización y animaciónAnimation and Timing System Overview

En este tema se describe cómo Timelineel Clock sistema de temporización utiliza la animación, y las clases para animar propiedades.This topic describes how the timing system uses the animation, Timeline, and Clock classes to animate properties.

Requisitos previosPrerequisites

Para entender este tema, debe poder utilizar animaciones WPFWPF para animar propiedades, como se describe en Información general sobre animaciones.To understand this topic, you should be able to use WPFWPF animations to animate properties, as described in the Animation Overview. También ayuda conocer las propiedades de dependencia; para más información, vea Información general sobre las propiedades de dependencia.It also helps to be familiar with dependency properties; for more information, see the Dependency Properties Overview.

Escalas de tiempo y relojesTimelines and Clocks

La información general Timeline sobre animación describe cómo a representa un Timeline segmento de tiempo y una animación es un tipo que produce valores de salida.The Animation Overview described how a Timeline represents a segment of time, and an animation is a type of Timeline that produces output values. Por sí Timelinemismo, un , no hace nada más que simplemente describir un segmento de tiempo.By itself, a Timeline, doesn't do anything other than just describe a segment of time. Es el objeto de Clock la línea de tiempo el que hace el trabajo real.It's the timeline's Clock object that does the real work. Del mismo modo, la animación no anima realmente las propiedades: una clase de Clock animación describe cómo se deben calcular los valores de salida, pero es el que se creó para la animación que controla la salida de animación y la aplica a las propiedades.Likewise, animation doesn't actually animate properties: an animation class describes how output values should be calculated, but it’s the Clock that was created for the animation that drives the animation output and applies it to properties.

A Clock es un tipo especial de objeto que mantiene el Timelineestado de tiempo de ejecución relacionado con la sincronización para el archivo .A Clock is a special type of object that maintains timing-related run-time state for the Timeline. Proporciona tres bits de información que son esenciales CurrentTime CurrentProgresspara CurrentStateel sistema de animación y sincronización: , , y .It provides three bits of information that are essential to the animation and timing system: CurrentTime, CurrentProgress, and CurrentState. A Clock determina su hora actual, progreso y estado mediante los Timeline Durationcomportamientos de temporización descritos por su : , RepeatBehavior, AutoReverse, , etc.A Clock determines its current time, progress, and state by using the timing behaviors described by its Timeline: Duration, RepeatBehavior, AutoReverse, and so on.

En la mayoría Clock de los casos, se crea automáticamente un para la línea de tiempo.In most cases, a Clock is created automatically for your timeline. Al animar mediante Storyboard un BeginAnimation método o mediante un método, los relojes se crean automáticamente para las escalas de tiempo y animaciones y se aplican a sus propiedades de destino.When you animate by using a Storyboard or the BeginAnimation method, clocks are automatically created for your timelines and animations and applied to their targeted properties. También puede crear Clock un explícitamente CreateClock mediante Timelineel método de su archivo .You can also create a Clock explicitly by using the CreateClock method of your Timeline. El MediaTimeline.CreateClock método crea un reloj del Timeline tipo adecuado para el tipo en el que se llama.The MediaTimeline.CreateClock method creates a clock of the appropriate type for the Timeline on which it is called. Si Timeline contiene líneas de tiempo Clock secundarias, también crea objetos para ellos.If the Timeline contains child timelines, it creates Clock objects for them as well. Los Clock objetos resultantes se organizan en Timeline árboles que coinciden con la estructura del árbol de objetos a partir del cual se crean.The resulting Clock objects are arranged in trees that match the structure of the Timeline objects tree from which they are created.

Hay diferentes tipos de relojes para diferentes tipos de escalas de tiempo.There are different types of clocks for different types of timelines. En la tabla Clock siguiente se muestran Timeline los tipos que corresponden a algunos de los diferentes tipos.The following table shows the Clock types that correspond to some of the different Timeline types.

Tipos de objetos TimelineTimeline type Tipo de relojClock type Propósito del relojClock purpose
Animación (hereda de AnimationTimeline)Animation (inherits from AnimationTimeline) AnimationClock Genera valores de salida para una propiedad de dependencia.Generates output values for a dependency property.
MediaTimeline MediaClock Procesa un archivo multimedia.Processes a media file.
ParallelTimeline ClockGroup Agrupa y controla sus objetos secundarios ClockGroups and controls its child Clock objects
Storyboard ClockGroup Agrupa y controla sus objetos secundarios ClockGroups and controls its child Clock objects

Puede aplicar AnimationClock cualquier objeto que cree a ApplyAnimationClock propiedades de dependencia compatibles mediante el método.You can apply any AnimationClock objects you create to compatible dependency properties by using the ApplyAnimationClock method.

En escenarios de rendimiento intensivo, como la animación de Clock un gran número de objetos similares, la administración de su propio uso puede proporcionar ventajas de rendimiento.In performance-intensive scenarios, such as animating large numbers of similar objects, managing your own Clock use can provide performance benefits.

Los relojes y el administrador de tiempoClocks and the Time Manager

Al animar objetos en WPFWPF, es el Clock administrador de tiempo que administra los objetos creados para las escalas de tiempo.When you animate objects in WPFWPF, it’s the time manager that manages the Clock objects created for your timelines. El administrador de tiempo es la raíz de un árbol de objetos Clock y controla el flujo de tiempo en ese árbol.The time manager is the root of a tree of Clock objects and controls the flow of time in that tree. El administrador de tiempo se crea automáticamente para cada aplicación WPFWPF y no es visible para el desarrollador de aplicaciones.A time manager is automatically created for each WPFWPF application and is invisible to the application developer. El administrador de tiempo "marca pasos" muchas veces por segundo; el número real de pasos que se producen cada segundo varía, en función de los recursos disponibles en el sistema.The time manager "ticks" many times per second; the actual number of ticks that occur each second varies depending on available system resources. Durante cada uno de estos ticks, el administrador Active Clock de tiempo calcula el estado de todos los objetos del árbol de tiempo.During each one of these ticks, the time manager computes the state of all Active Clock objects in the timing tree.

En la ilustración siguiente se muestra AnimationClockla relación entre el administrador de tiempo y , y una propiedad de dependencia animada.The following illustration shows the relationship between the time manager, and AnimationClock, and an animated dependency property.

Componentes del sistema de control de tiempoTiming system components
Animación de una propiedadAnimating a property

Cuando el administrador de tiempo marca, Active Clock actualiza el tiempo de cada uno en la aplicación.When the time manager ticks, it updates the time of every Active Clock in the application. Si Clock es AnimationClockun , GetCurrentValue utiliza el AnimationTimeline método de la a partir de la cual se creó para calcular su valor de salida actual.If the Clock is an AnimationClock, it uses the GetCurrentValue method of the AnimationTimeline from which it was created to calculate its current output value. El AnimationClock proporciona AnimationTimeline la hora local actual, un valor de entrada, que suele ser el valor base de la propiedad y un valor de destino predeterminado.The AnimationClock supplies the AnimationTimeline with the current local time, an input value, which is typically the base value of the property, and a default destination value. Cuando se recupera el valor de GetValue una propiedad animada por el método AnimationClocko su descriptor de acceso CLR, se obtiene la salida de su archivo .When you retrieve the value of an animated by property using the GetValue method or its CLR accessor, you get the output of its AnimationClock.

Grupos de relojesClock Groups

En la sección anterior se describe Clock cómo hay diferentes tipos de objetos para diferentes tipos de escalas de tiempo.The preceding section described how there are different types of Clock objects for different types of timelines. En la ilustración siguiente se muestra ClockGroupla AnimationClockrelación entre el administrador de tiempo, un , un , y una propiedad de dependencia animada.The following illustration shows the relationship between the time manager, a ClockGroup, an AnimationClock, and an animated dependency property. A ClockGroup se crea para las escalas de Storyboard tiempo que agrupan otras escalas de tiempo, como la clase, que agrupa animaciones y otras escalas de tiempo.A ClockGroup is created for timelines that group other timelines, such as the Storyboard class, which groups animations and other timelines.

Componentes del sistema de control de tiempoTiming system components
Un objeto ClockGroupA ClockGroup

ComposiciónComposition

Es posible asociar varios relojes a una única propiedad, en cuyo caso cada reloj utiliza el valor de salida del reloj anterior como su valor base.It's possible to associate multiple clocks with a single property, in which case each clock uses the output value of the preceding clock as its base value. En la ilustración siguiente se muestran tres AnimationClock objetos aplicados a la misma propiedad.The following illustration shows three AnimationClock objects applied to the same property. El reloj1 utiliza el valor base de la propiedad animada como entrada y lo utiliza para generar la salida.Clock1 uses the base value of the animated property as its input and uses it to generate output. El reloj2 toma la salida del reloj1 como entrada y lo utiliza para generar la salida.Clock2 takes the output from Clock1 as its input and uses it to generate output. El reloj3 toma la salida del reloj2 como entrada y lo utiliza para generar la salida.Clock3 takes the output from Clock2 as its input and uses it to generate output. Cuando varios relojes afectan simultáneamente a la misma propiedad, se dice que están en una cadena de composición.When multiple clocks affect the same property simultaneously, they are said to be in a composition chain.

Componentes del sistema de control de tiempoTiming system components
Una cadena de composiciónA composition chain

Tenga en cuenta que aunque se crea AnimationClock una relación entre la entrada y salida de los objetos de la cadena de composición, sus comportamientos de temporización no se ven afectados; Clock los objetos (incluidos AnimationClock los objetos) tienen una dependencia jerárquica de sus objetos primarios. ClockNote that although a relationship is created among the input and output of the AnimationClock objects in the composition chain, their timing behaviors are not affected; Clock objects (including AnimationClock objects) have a hierarchical dependency on their parent Clock objects.

Para aplicar varios relojes a la Compose HandoffBehavior misma propiedad, Storyboardutilice la AnimationClockopción al aplicar un , animación o .To apply multiple clocks to the same property, use the Compose HandoffBehavior when applying a Storyboard, animation, or AnimationClock.

Pasos y consolidación de eventosTicks and Event Consolidation

Además de calcular valores de salida, el administrador de tiempo hace otras cosas a cada paso que marca: determina el estado de cada reloj y genera los eventos adecuados.In addition to calculating output values, the time manager does other work every time it ticks: it determines the state of each clock and raises events as appropriate.

Aunque los ciclos se producen con frecuencia, pueden ocurrir muchas cosas entre ellos.While ticks occur frequently, it's possible for a lot of things to happen between ticks. Por ejemplo, Clock un podría detenerse, iniciarse y detenerse CurrentState de nuevo, en cuyo caso su valor habrá cambiado tres veces.For example, a Clock might be stopped, started, and stopped again, in which case its CurrentState value will have changed three times. En teoría, CurrentStateInvalidated el evento podría generarse varias veces en un solo tick; sin embargo, el motor de CurrentStateInvalidated sincronización consolida los eventos, de modo que el evento se puede generar como máximo una vez por tick.In theory, the CurrentStateInvalidated event could be raised multiple times in a single tick; however, the timing engine consolidates events, so that the CurrentStateInvalidated event can be raised at most once per tick. Esto es cierto para todos los eventos de sincronización: como Clock máximo, se genera un evento de cada tipo para un objeto determinado.This is true for all timing events: at most one event of each type is raised for a given Clock object.

Cuando Clock un modificador indica y vuelve a su estado original Active entre Stopped ticks Active(por ejemplo, cambiar de a y de vuelta a ), el evento asociado sigue apareciendo.When a Clock switches states and returns back to its original state between ticks (such as changing from Active to Stopped and back to Active), the associated event still occurs.

Para más información acerca de los eventos de control de tiempo, vea Información general sobre eventos de control de tiempo.For more information about timing events, see the Timing Events Overview.

Valores actuales y valores base de propiedadesCurrent Values and Base Values of Properties

Una propiedad que se pueda animar puede tener dos valores: un valor base y un valor actual.An animatable property can have two values: a base value and a current value. Cuando se establece la propiedad SetValue mediante su descriptor de acceso CLR o el método, se establece su valor base.When you set property using its CLR accessor or the SetValue method, you set its base value. Cuando no se anima una propiedad, su valor base y su valor actual son el mismo.When a property is not animated, its base and current values are the same.

Al animar una propiedad, establece el AnimationClock valor actual de la propiedad.When you animate a property, the AnimationClock sets the property's current value. Recuperar el valor de la propiedad a GetValue través de AnimationClock su AnimationClock descriptor Active de acceso CLR o el método devuelve la salida de la cuando es o Filling.Retrieving the property's value through its CLR accessor or the GetValue method returns the output of the AnimationClock when the AnimationClock is Active or Filling. Puede recuperar el valor base de GetAnimationBaseValue la propiedad mediante el método.You can retrieve the property's base value by using the GetAnimationBaseValue method.

Consulte tambiénSee also