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
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
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.
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#.
Je sais que l'inverse est possible :
Lancer une animation depuis du code c#, ça ne te conviendrai pas ça ?
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 ?
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); }
Pourrais tu également mettre le code de tes deux storyboard stp ?
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
Fais en sorte que la deuxième animation commence à :
soit après la première animation
Code : Sélectionner tout - Visualiser dans une fenêtre à part BeginTime="00:00:00.5000000"
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.
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é...
![]()
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![]()
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);
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.
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:
Et uniquement la 2eme était visible
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
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>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...
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Storyboard sb = (Storyboard)FindResource("FlipAnim"); sb.Begin(this); // CODE
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![]()
Partager