Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

Tout sur WPF, LINQ, C# et .NET en général !

Actualités

[WPF /E] Contrôler une animation créée dynamiquement

WPF /E (Windows Presentation Foundation Everywhere) permet aux développeurs de créer dynamiquement des objets directement à partir d'une chaîne de caractères représentant un bout de code XAML (eXtensible Application Markup Language).

Cela est possible grâce à la méthode createFromXaml Smile

Il est même possible d'utiliser les transformations et les animations pour proposer une expérience utilisateur un peu plus riche. Seulement voila, à chaque fois que l'on voit un exemple d'une animation agissant sur une transformation, il se trouve que le code XAML est déjà écrit dans notre fichier. A ce moment là, il ne nous reste plus qu'à appeller (en Javascript) les méthodes begin, pause et stop de notre storyboard pour controller l'animation.

Cependant, il peut-être intéressant de se demander (comme moi) comment faire pour animer une transformation que l'on aura créée dynamiquement (au moyen de la méthode createFromXaml). A première vue, aucun problèmes en perspective: on créé notre transformation, on définit l'animation:

<Image RenderTransformOrigin="0.5, 0.5">
      <Image.RenderTransform>
        <ScaleTransform ScaleX="1" ScaleY="1" />
      </Image.RenderTransform>
      <Image.Triggers>
        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
          <EventTrigger.Actions>
            <BeginStoryboard>
              <Storyboard x:Name="AnimateImage">
                <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName='" + MyImg + "' Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
                  <SplineDoubleKeyFrame KeyTime="00:00:01" Value="1.5"/>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName='" + MyImg + "' Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
                  <SplineDoubleKeyFrame KeyTime="00:00:01" Value="1.5"/>
                </DoubleAnimationUsingKeyFrames>
              </Storyboard>
            </BeginStoryboard>
          </EventTrigger.Actions>
        </EventTrigger>
      </Image.Triggers>
    </Image>

Et on la contrôle en JS:

function hyperlink_MouseEnter(sender,args)
{     
    sender.findName("AnimateImage").begin();
      
    sender.opacity = 1;
}

 Seulement voila, ce code, bien que très simple, ne fonctionnait pas chez moi. Pourtant, à priori, il n'y a aucun problèmes au niveau du code.

Pour que cela fonctionne, il faut utiliser ce code:

<Image RenderTransformOrigin="0.5, 0.5">
      <Image.RenderTransform>
        <ScaleTransform x:Name="MyAnimation" ScaleX="1" ScaleY="1" />
      </Image.RenderTransform>
      <Image.Triggers>
        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
          <EventTrigger.Actions>
            <BeginStoryboard>
              <Storyboard x:Name="AnimateImage">
                <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="MyAnimation" Storyboard.TargetProperty="ScaleX">
                  <SplineDoubleKeyFrame KeyTime="00:00:01" Value="1.5"/>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="MyAnimation" Storyboard.TargetProperty="ScaleY">
                  <SplineDoubleKeyFrame KeyTime="00:00:01" Value="1.5"/>
                </DoubleAnimationUsingKeyFrames>
              </Storyboard>
            </BeginStoryboard>
          </EventTrigger.Actions>
        </EventTrigger>
      </Image.Triggers>
    </Image>

Pour simplifier, il vous faut nommer votre animation et en animer les propriétés.

 

A+

 

 

Technorati tags:
 
del.icio.us tags:
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: lundi 12 mars 2007 10:41 par Thomas LEBRUN
Classé sous : ,

Commentaires

khamlon a dit :

je n'ai qu'une chose à dire... se méfier des erreurs que la méthode createFromXaml lève... :)

# mars 12, 2007 12:26

Thomas LEBRUN a dit :

Pourquoi, moi je trouve que le code d'erreur -2147418113 est très parlant pourtant :)

# mars 12, 2007 12:30

khamlon a dit :

... va afficher tes png plutot :d

# mars 12, 2007 12:50
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le il y a 19 heures et 20 minutes

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le il y a 21 heures et 53 minutes

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59

- Perspective 3.0 pour Silverlight 5.0 par Perspective le 02-07-2012, 22:39