IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Du code entre 2 animations


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut Du code entre 2 animations
    Bonjour,


    A l'ai de Blend je crée une animation, je voudrais savoir si pendant cette animation il est possible d'ajouter du code C#.

    Dans mon cas je voudrais faire disparaitre des controles et en faire apparaitre d'autres.


    Cordialement

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Je suis pas sûr d'avoir compris... en fait dans ton animation, tu peux jouer sur la propriété Opacity de ton contrôle pour le faire disparaître.

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        <Storyboard x:Key="HideControl">
          <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="TonControl" 
                                         Storyboard.TargetProperty="(UIElement.Opacity)">
            <SplineDoubleKeyFrame KeyTime="00:00:0.25" Value="0"/>
          </DoubleAnimationUsingKeyFrames>
        </Storyboard>

    [Edit] Cette animation cache le control, il reste à en faire une qui met l'opacité à 1 si tu veux le faire apparaître.

  3. #3
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Non ce n'est pas ca.

    Imaginons que je fasse une animation, peu importe laquelle.
    Et je voudrais que pendant que cette animation s"execute également exécuter du code C#.

  4. #4
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Je sais que l'inverse est possible :
    Lancer une animation depuis du code c#, ça ne te conviendrai pas ça ?

  5. #5
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Si c est quelque chose qui me conviendrait

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Oui tu peux lancer ton animation depuis le code ainsi :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Storyboard sb = (Storyboard)FindResource( "keyDeMonAnimation" );
            sb.Begin( this );
     
            // Code c# divers, par exemple :
            monButton.Text = "toto";

    Le code que tu auras écris va se produire durant l'animation (tout du moins si elle dure suffisamment longtemps).

    Est-ce que ça répond à ta question ?

  7. #7
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Oui cela répond à ma question.
    Merci

  8. #8
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Alors en fait pour faire ce que je veux.
    J'ai créé mon effet désiré en 2 partie pour pouvoir effectuer du code entre les 2 animations.


    Ce quie je fais pour tester pour le moment, c est que je lance mes animations l'une apres l'autre. Mais j'ai l'impression que la 1ere storyboard n'est pas lancé.

    Dois-je passer par une Timer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            public void OnTestClick(object sender, RoutedEventArgs e)
            {
                Storyboard sb1 = (Storyboard)FindResource("FlipFirstHalf");
                sb1.Begin(this);
                sb1.Stop(this);
     
                //Storyboard sb2 = (Storyboard)FindResource("FlipSecondHalf");
                //sb2.Begin(this);
                //sb2.Stop(this);
     
            }

  9. #9
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Pourrais tu également mettre le code de tes deux storyboard stp ?

  10. #10
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    		<Storyboard x:Key="FlipSecondHalf">
    			<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Cadre" Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
    				<SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="1"/>
    			</DoubleAnimationUsingKeyFrames>
    			<PointAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Cadre" Storyboard.TargetProperty="(UIElement.RenderTransformOrigin)">
    				<SplinePointKeyFrame KeyTime="00:00:00.5000000" Value="0.5,0.5"/>
    			</PointAnimationUsingKeyFrames>
    			<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Cadre" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
    				<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
    				<SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="-1"/>
    			</DoubleAnimationUsingKeyFrames>
    		</Storyboard>
    		<Storyboard x:Key="FlipFirstHalf">
    			<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Cadre" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
    				<SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0"/>
    			</DoubleAnimationUsingKeyFrames>
    			<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="txtContent" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
    				<SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0"/>
    			</DoubleAnimationUsingKeyFrames>
    		</Storyboard>


    Dans "FlipFirstHalf" je déforme mon control Image "Cadre" ainsi que mon txtbox "txtContent".

    DAns "FlipSecondHalf" je déforme à nouveau mon control Image

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Fais en sorte que la deuxième animation commence à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BeginTime="00:00:00.5000000"
    soit après la première animation

    Les lignes de code s'exécutant "extrêmement" rapidement l'animation 2 se lance quasiment en même temps que la première et du coup comme elles agissent sur le même contrôle, elle doit prendre le dessus sur la première.

  12. #12
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    J'ai tenté ce que tu viens de me dire binoo, mais le résultat est le meme, peut importe le temps indiqué.

    En passant par le debugger ma premiere storyboard est pourtant bien executé...

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Pourtant le code suivant doit marcher j'ai testé ce genre d'animation et ça fonctionnait :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    		<Storyboard x:Key="FlipSecondHalf">
    			<DoubleAnimationUsingKeyFrames BeginTime="00:00:03" Storyboard.TargetName="Cadre" Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
    				<SplineDoubleKeyFrame KeyTime="00:00:03" Value="1"/>
    			</DoubleAnimationUsingKeyFrames>
    			<PointAnimationUsingKeyFrames BeginTime="00:00:03" Storyboard.TargetName="Cadre" Storyboard.TargetProperty="(UIElement.RenderTransformOrigin)">
    				<SplinePointKeyFrame KeyTime="00:00:03" Value="0.5,0.5"/>
    			</PointAnimationUsingKeyFrames>
    			<DoubleAnimationUsingKeyFrames BeginTime="00:00:03" Storyboard.TargetName="Cadre" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
    				<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
    				<SplineDoubleKeyFrame KeyTime="00:00:03" Value="-1"/>
    			</DoubleAnimationUsingKeyFrames>
    		</Storyboard>
     
    		<Storyboard x:Key="FlipFirstHalf">
    			<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Cadre" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
    				<SplineDoubleKeyFrame KeyTime="00:00:03" Value="0"/>
    			</DoubleAnimationUsingKeyFrames>
    			<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="txtContent" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
    				<SplineDoubleKeyFrame KeyTime="00:00:03" Value="0"/>
    			</DoubleAnimationUsingKeyFrames>
    		</Storyboard>

    J'ai mis des valeurs de temps grande, tu devrais mieux voir les deux animations

  14. #14
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Ca me parrait assez bizarre!
    J'ai aussi mit des temps de valeur grande, genre 3sec et en fait ma premiere animation n'est pas lancé mais la 2eme est bien lancé 3 seconde apres...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    Storyboard sb1 = (Storyboard)FindResource("FlipFirstHalfReturn");
                    sb1.Begin(this);
     
                    Storyboard sb2 = (Storyboard)FindResource("FlipSecondHalfReturn");
                    sb2.Begin(this);

  15. #15
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Tu m'as mis le doute alors j'ai testé et ça marche bien chez moi

    Je t'ai mis l'appli de test en pièce jointe (mais c'est tout simplement le code présent dans ce post). Tu as l'exécutable également.

  16. #16
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Citation Envoyé par binoo Voir le message
    Tu m'as mis le doute alors j'ai testé et ça marche bien chez moi

    Je t'ai mis l'appli de test en pièce jointe (mais c'est tout simplement le code présent dans ce post). Tu as l'exécutable également.
    Ca marche effectivement chez toi, mais chez moi c est toujours le mystere, je fais pourtant la meme chose...

  17. #17
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Je sèche là

  18. #18
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Je reviens sur ton problème car la solution est peut-être de mettre tes animations dans le même Storyboard. Etant donné que les animations sont lancées en même temps . Ça devrait résoudre ce problème.

  19. #19
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Citation Envoyé par binoo Voir le message
    Je reviens sur ton problème car la solution est peut-être de mettre tes animations dans le même Storyboard. Etant donné que les animations sont lancées en même temps . Ça devrait résoudre ce problème.
    Je ne vois pas ce que tu veux dire.
    Peux tu mettre un petit exemple.

    Le probleme que j'avais était le suiviant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //je lancais mon animation
    // je faisais du code
    //je lancais la 2eme
    Et uniquement la 2eme était visible

  20. #20
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    En fait j'avais oublié le code que tu faisais entre les deux, mais dans l'idée :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    		<Storyboard x:Key="FlipAnim">
     
    			<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Cadre" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
    				<SplineDoubleKeyFrame KeyTime="00:00:03" Value="0"/>
    			</DoubleAnimationUsingKeyFrames>
    			<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="txtContent" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
    				<SplineDoubleKeyFrame KeyTime="00:00:03" Value="0"/>
    			</DoubleAnimationUsingKeyFrames>
     
    			<DoubleAnimationUsingKeyFrames BeginTime="00:00:03" Storyboard.TargetName="Cadre" Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
    				<SplineDoubleKeyFrame KeyTime="00:00:03" Value="1"/>
    			</DoubleAnimationUsingKeyFrames>
    			<PointAnimationUsingKeyFrames BeginTime="00:00:03" Storyboard.TargetName="Cadre" Storyboard.TargetProperty="(UIElement.RenderTransformOrigin)">
    				<SplinePointKeyFrame KeyTime="00:00:03" Value="0.5,0.5"/>
    			</PointAnimationUsingKeyFrames>
    			<DoubleAnimationUsingKeyFrames BeginTime="00:00:03" Storyboard.TargetName="Cadre" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
    				<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
    				<SplineDoubleKeyFrame KeyTime="00:00:03" Value="-1"/>
    			</DoubleAnimationUsingKeyFrames>
    		</Storyboard>
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    Storyboard sb = (Storyboard)FindResource("FlipAnim");
                    sb.Begin(this);
                    // CODE
    L'animation est faite en une fois. Ton code est lancé après, il va s'exécuter en même temps que l'animation quoi qu'il arrive...

    A moins bien sûr d'utiliser un timer qui exécutera le code qu'après le temps de la première anim. C'est peut-être là la solution

Discussions similaires

  1. Compatibilité du code entre navigateurs
    Par solp dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 12/04/2006, 16h30
  2. [VBA] Code entre forms
    Par Virgile59 dans le forum Access
    Réponses: 3
    Dernier message: 28/12/2005, 21h57
  3. reprendre un enchainement de code entre deux formulaires.
    Par scully2501 dans le forum Access
    Réponses: 2
    Dernier message: 05/10/2005, 16h11
  4. [VB.NET] Comment ecrire du code entre <title>
    Par ykane dans le forum ASP.NET
    Réponses: 5
    Dernier message: 10/05/2004, 16h58
  5. Réponses: 3
    Dernier message: 11/04/2004, 01h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo