Вопрос

У меня есть что-то вроде этого:

barProgress.BeginAnimation(RangeBase.ValueProperty, new DoubleAnimation(
    barProgress.Value, dNextProgressValue,
    new Duration(TimeSpan.FromSeconds(dDuration)));

Теперь, как бы вы остановили эту анимацию ( DoubleAnimation)?Причина, по которой я хочу это сделать, заключается в том, что я хотел бы запустить новую анимацию (кажется, это работает, но трудно сказать) и в конечном итоге остановить последнюю анимацию...

Это было полезно?

Решение

Чтобы остановить это, позвоните BeginAnimation снова со вторым аргументом, установленным в null.

Другие советы

При использовании раскадровки для управления анимацией убедитесь, что для второго параметра установлено значение true, чтобы анимация стала управляемой:

public void Begin(
    FrameworkContentElement containingObject,
    **bool isControllable**
)

Есть два способа остановить BeginAnimation.Первый — снова вызвать BeginAnimation со вторым параметром, равным нулю.Это приведет к удалению всех анимаций в свойстве и возвращаться значение возвращается к своему базовому значению.

В зависимости от того, как вы используете это значение, это может быть не то поведение, которое вам нужно.Второй способ — установить для BeginTime анимации значение null, а затем вызвать с его помощью BeginAnimation.Это удалит эту конкретную анимацию и оставит значение в текущей позиции.

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);

Если вы хотите, чтобы базовое значение снова стало эффективным значением, вы должны помешать анимации влиять на свойство.Есть три способа сделать это с помощью раскадровки анимации:

  • Установите свойство Fillbehavior, чтобы остановиться
  • Удалить всю раскадровку
  • Удалить анимацию из отдельного свойства

Из MSDN

Как:Установите свойство после анимации его с помощью раскадровки

В моем случае мне пришлось использовать две команды: в моем xaml есть кнопка, которая запускает триггер, и ее триггер запускает анимацию раскадровки.

Я добавил кнопку остановки анимации с помощью этого кода:

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

Мне это не нравится, но здесь это действительно работает.Попробуйте!

<Trigger.EnterActions>
       <BeginStoryboard x:Name="myStory">
       .........
       </BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
       <StopStoryboard BeginStoryboardName="myStory"/>
</Trigger.ExitActions>

Поместите анимацию в StoryBoard.Вызовите Begin() и Stop() в раскадровке, чтобы начать и остановить анимацию.

Вы можете использовать этот код:

[StoryBoardName].Remove([StoryBoardOwnerControl]);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top