Vue d'ensemble des événements de minutage

Mise à jour : novembre 2007

Cette rubrique décrit comment utiliser les cinq événements de minutage disponibles sur les objets Timeline et Clock.

Composants requis

Pour comprendre cette rubrique, vous devez comprendre comment créer et utiliser des animations. Pour la prise en main des animations, consultez Vue d'ensemble de l'animation.

Il y a plusieurs méthodes pour animer des propriétés dans WPF :

Du fait que vous pouvez les utiliser dans la balise et le code, les exemples dans cette vue d'ensemble utilisent des objets Storyboard. Toutefois, les concepts décrits peuvent être appliqués aux autres méthodes d'animation des propriétés.

Qu'est-ce qu'une horloge ?

Une chronologie, par elle-même, ne fait réellement rien d'autre que de décrire un segment de temps. C'est l'objet Clock de la chronologie qui fait le vrai travail : il maintient l'état connexe à horloge au moment de l'exécution de la chronologie. Dans la plupart des cas, comme lors de l'utilisation de tables de montage séquentiel, une horloge est créée automatiquement pour votre chronologie. Vous pouvez également créer une Clock de manière explicite à l'aide de la méthode CreateClock. Pour plus d'informations sur les objets Clock, consultez Vue d'ensemble de l'animation et du système de minutage.

Pourquoi utiliser des événements ?

À une exception près (appel aligné sur le dernier battement), les opérations d'horloge interactives sont toutes asynchrones. Vous ne disposez d'aucun moyen de savoir quand elles se produisent exactement. Cela peut poser un problème lorsque vous avez un autre code qui est dépendant de l'opération d'horloge. Supposez que vous souhaitiez arrêter une chronologie qui animait un rectangle. Après avoir arrêté la chronologie, vous modifiez la couleur du rectangle.

myStoryboard.Stop(myRectangle);

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

Dans l'exemple précédent, la deuxième ligne de code peut s'exécuter avant l'arrêt de la table de montage séquentiel. La raison en est que l'arrêt est une opération asynchrone. Demander à une chronologie ou une horloge de s'arrêter crée un genre de « demande d'arrêt » qui n'est pas traitée avant le prochain battement du moteur de minutage.

Pour exécuter des commandes après avoir complété une chronologie, utilisez les événements de minutage. Dans l'exemple suivant, un gestionnaire d'événements est utilisé pour modifier la couleur d'un rectangle après que la lecture de la table de montage séquentiel s'est arrêtée.

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

Pour un exemple plus complet, consultez Comment : recevoir une notification en cas de changement d'état de l'horloge.

Événements publics

Les classes Timeline et Clock fournissent toutes deux cinq événements de minutage. La table suivante répertorie ces événements et les conditions qui les déclenchent.

Événement

Opération interactive de déclenchement

Autres déclencheurs

Terminé

Ignorer pour remplir

L'horloge se termine.

CurrentGlobalSpeedInvalidated

Pause, résumé, appel, définir ratio vitesse, ignorer pour remplir, arrêt

L'horloge s'inverse, accélère, démarre ou s'arrête.

CurrentStateInvalidated

Démarrer, ignorer pour remplir, arrêter

L'horloge démarre, s'arrête ou remplit.

CurrentTimeInvalidated

Démarrer, appeler, ignorer pour remplir, arrêter

L'horloge progresse.

RemoveRequested

Enlever

Consolidation de battement et d'événement

Lorsque vous animez des objets dans WPF, c'est le moteur de minutage qui gère vos animations. Le moteur de minutage suit la progression du temps et calcule l'état de chaque animation. Il fait de telles passes d'évaluation plusieurs fois par seconde. Ces passes d'évaluation sont appelées "battements".

Alors que les battements se produisent fréquemment, il est possible que beaucoup de choses se passent entre les battements. Par exemple, une chronologie peut être arrêtée, commencé, arrêtée à nouveau, auquel cas son état actuel aura changé trois fois. En théorie, l'événement pourrait être déclenché plusieurs fois dans un seul battement ; toutefois, le moteur de minutage consolide les événements, afin que chaque événement puisse être déclenché au plus une fois par battement.

Inscription aux événements

Il y a deux méthodes pour s'inscrire aux événements de minutage : avec la chronologie ou avec l'horloge créée à partir de la chronologie. L'inscription directe à un événement avec une horloge est assez simple, même si elle ne peut s'effectuer qu'à partir de code. Vous pouvez vous inscrire aux événements avec une chronologie de balise ou de code. La section suivante décrit comment s'inscrire aux événements de minutage avec une chronologie.

S'inscrire aux événements de minuterie avec une chronologie

Bien que Completed, CurrentGlobalSpeedInvalidated, CurrentStateInvalidated, CurrentTimeInvalidated et les événements RemoveRequested semblent être associés à la chronologie, l'inscription à ces événements associe réellement un gestionnaire d'événements au Clock créé pour la chronologie.

Lorsque vous vous inscrivez à l'événement Completed sur une chronologie, par exemple, vous indiquez en fait au système de s'inscrire à l'événement Completed de chaque horloge créée pour la chronologie. Dans le code, vous devez vous inscrire à cet événement avant que le Clock ne soit créé pour cette chronologie; sinon, vous ne recevrez aucune notification. Cela se produit automatiquement en XAML ; l'analyseur s'inscrit automatiquement à l'événement avant que le Clock ne soit créé.

Voir aussi

Concepts

Vue d'ensemble de l'animation et du système de minutage

Vue d'ensemble de l'animation

Vue d'ensemble des comportements de minutage

Autres ressources

Exemples d'animation et de minutage