Comment arrêter une animation en C# / WPF ?
Question
J'ai quelque chose comme ça :
barProgress.BeginAnimation(RangeBase.ValueProperty, new DoubleAnimation( barProgress.Value, dNextProgressValue, new Duration(TimeSpan.FromSeconds(dDuration)));
Maintenant, comment arrêteriez-vous cette animation (le DoubleAnimation
) ?La raison pour laquelle je veux faire cela, c'est parce que j'aimerais démarrer de nouvelles animations (cela semble fonctionner, mais c'est difficile à dire) et éventuellement arrêter la dernière animation...
La solution
Pour l'arrêter, appelez BeginAnimation
encore une fois avec le deuxième argument défini sur null
.
Autres conseils
Lorsque vous utilisez des storyboards pour contrôler une animation, assurez-vous de définir le deuxième paramètre sur true afin de définir l'animation comme contrôlable :
public void Begin(
FrameworkContentElement containingObject,
**bool isControllable**
)
Il existe deux façons d’arrêter un BeginAnimation.La première consiste à appeler à nouveau BeginAnimation avec le deuxième paramètre défini sur null.Cela supprimera toutes les animations sur la propriété et revenir la valeur revient à sa valeur de base.
Selon la façon dont vous utilisez cette valeur, ce comportement peut ne pas être souhaité.La deuxième façon consiste à définir les animations BeginTime sur null, puis à appeler BeginAnimation avec.Cela supprimera cette animation spécifique et laissera la valeur à sa position actuelle.
DoubleAnimation myAnimation = new Animation();
// Initialize animation
...
// To start
element.BeginAnimation(Property, myAnimation);
// To stop and keep the current value of the animated property
myAnimation.BeginTime = null;
element.BeginAnimation(Property, myAnimation);
Si vous voulez que la valeur de base redevienne la valeur effective, vous devez empêcher l'animation d'influencer la propriété.Il y a trois façons de le faire avec des animations de storyboard:
- Définissez la propriété Fillbehavior de l'animation pour arrêter
- Supprimer tout le storyboard
- Supprimer l'animation de la propriété individuelle
Depuis MSDN
Comment:Définir une propriété après l'avoir animée avec un storyboard
Dans mon cas, j'ai dû utiliser deux commandes, mon xaml a un bouton qui déclenche un déclencheur et son déclencheur déclenche l'animation du storyboard.
J'ai mis un bouton pour arrêter l'animation avec ce code derrière :
MyBeginStoryboard.Storyboard.Begin(this, true);
MyBeginStoryboard.Storyboard.Stop(this);
Je n'aime pas ça mais ça marche vraiment ici.Essaie!
<Trigger.EnterActions>
<BeginStoryboard x:Name="myStory">
.........
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<StopStoryboard BeginStoryboardName="myStory"/>
</Trigger.ExitActions>
Placez l'animation dans un StoryBoard.Appelez Begin() et Stop() sur le storyboard pour démarrer et arrêter les animations.
Vous pouvez utiliser ce code :
[StoryBoardName].Remove([StoryBoardOwnerControl]);