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); }
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![]()
Cependant j'ai un soucis du meme genre en ce moment.
J'ai une animation sur l'événement "Closing" d'une window.
Et l'animation n'est pas visible car le fermeture s'effectue casiment instentanement.
N'y a t'il pas une méthose qui exsite pour bloquer le programme?
Il me semble avoir déja utiliser cela?
Partager