- La propriété à animer doit être une DependencyProperty,
- Cela entraine par la même que l'objet animé doit être un DependencyObject,
- L'objet doit implémenté l'interface IAnimatable afin d'être en mesure de lancer l'animation.
Nous allons voir comment contourner ce problème pour créer, lancer et contrôler une animation sur tout type d'objet avec WPF depuis le code !
Le processus est consistué de plusieurs étapes :
- Créer l'animation,
- Créer un storyboard (le contenu de l'animation),
- Définir les bonnes valeurs pour les propriétés TargetName et TargetProperty.
La solution que j'utilise
Premièrement nous crééons un objet dérivant de FrameworkElement. Pourquoi ? Parceque cela a le double avantage d'être un DependencyObject et d'implémenter IAnimatable( FrameworkElement hérite de UIElement qui implémente IAnimatable). De plus il possède un NameScope, chose qui est nécessaire comme nous le verrons plus tard.Je vous présente donc mon objet "poupée" :Ensuite, nous ajoutons une DependencyProperty qui sera la valeur animée. Dans notre cas, on utilise une valeur de type Point mais il faut choisir le type qui vous convient. On ajouter de même un Storyboard à cet objet.Alors, nous allons créer et lancer l'animation directement depuis le constructeur de l'objet (le code est commenté en dessous) : Qu'est ce qui est fait ? Tout d'abord on instancie un objet Animation avec des valeurs aléatoires. Ensuite, un NameScope est créé et assigné à notre objet. Ceci est nécessaire, car comme celui-ci n'est pas instancié par le runtime, aucun ne lui est attribué. Ce NameScope sera utilisé par l'animation pour retrouver l'objet à animer.
On fournit donc le nom de notre poupée à l'animation en l'assignant à la propriété TargetName via la méthode static (StoryBoard.SetTargetName).
Pour finir, on vide les enfants présent dans le StoryBoard(qui n'était peut être pas vide) et nous démarrons l'animation en fournissant l'objet à animer (soi-même : this).
Ensutie, il est facile de contrôler les animations via les méthodes du Storyboard :Conclusion
Comme vous avez pu le lire, ce n'est pas la façon préconisée par Microsoft qui préfère laisser ce travail aux designers via XAML mais cela reste tout de même possible !(Article traduit de l'anglais depuis : http://blog.lexique-du-net.com )
Commentaires (0)
| < Précédent | Suivant > |
|---|





