How to stop an animation in C# / WPF?

前端 未结 8 692
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-28 08:54

I have something like this:

barProgress.BeginAnimation(RangeBase.ValueProperty, new DoubleAnimation(
    barProgress.Value, dNextProgressValue,
    new Duration(T         


        
相关标签:
8条回答
  • 2020-11-28 09:30

    In my case I had to use two commands, my xaml has a button which fires a trigger, and its trigger fires the storyboard animation.

    I've put a button to stop animation with this code behind:

    MyBeginStoryboard.Storyboard.Begin(this, true);
    MyBeginStoryboard.Storyboard.Stop(this);
    

    I don't like it but it really works here. Give it a try!

    0 讨论(0)
  • 2020-11-28 09:31

    If you want the base value to become the effective value again, you must stop the animation from influencing the property. There are three ways to do this with storyboard animations:

    • Set the animation's FillBehavior property to Stop
    • Remove the entire Storyboard
    • Remove the animation from the individual property

    From MSDN

    How to: Set a Property After Animating It with a Storyboard

    0 讨论(0)
  • 2020-11-28 09:42

    When using storyboards to control an animation, make sure you set the second parameter to true in order to set the animation as controllable:

    public void Begin(
        FrameworkContentElement containingObject,
        **bool isControllable**
    )
    
    0 讨论(0)
  • 2020-11-28 09:43

    You can use this code:

    [StoryBoardName].Remove([StoryBoardOwnerControl]);
    
    0 讨论(0)
  • 2020-11-28 09:48

    Place the animation in a StoryBoard. Call Begin() and Stop() on the storyboard to start to stop the animations.

    0 讨论(0)
  • 2020-11-28 09:50

    There are two ways to stop a BeginAnimation. The first is to call BeginAnimation again with the second parameter set to null. This will remove all animations on the property and revert the value back to its base value.

    Depending on how you are using that value this may not be the behavior you want. The second way is to set the animations BeginTime to null then call BeginAnimation with it. This will remove that specific animation and leave the value at its current position.

    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);
    
    0 讨论(0)
提交回复
热议问题