Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

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

[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

- Silverlight 3 : Communication et multicast par Kévin Gosse le il y a 4 heures et 24 minutes

- [Perso] Découvertes estivales : Linux (Part I) par Le blog de FremyCompany le il y a 7 heures et 5 minutes

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 21 heures et 42 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 22 heures et 56 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le 07-03-2009, 09:56

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le 07-03-2009, 09:00

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 07-03-2009, 08:45

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15