Как остановить анимацию в C # / WPF? - PullRequest
47 голосов
/ 21 августа 2008

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

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

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

Ответы [ 8 ]

76 голосов
/ 21 августа 2008

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

29 голосов
/ 31 августа 2008

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

public void Begin(
    FrameworkContentElement containingObject,
    **bool isControllable**
)
16 голосов
/ 24 февраля 2012

Есть два способа остановить 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);
7 голосов
/ 02 июля 2009

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

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

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

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

7 голосов
/ 17 декабря 2008

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

  • Установить анимацию FillBehavior свойство Stop
  • Удалить всю раскадровку
  • Удалить анимацию из индивидуальная собственность

Из MSDN

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

6 голосов
/ 02 ноября 2015
<Trigger.EnterActions>
       <BeginStoryboard x:Name="myStory">
       .........
       </BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
       <StopStoryboard BeginStoryboardName="myStory"/>
</Trigger.ExitActions>
4 голосов
/ 21 августа 2008

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

0 голосов
/ 07 августа 2013

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

[StoryBoardName].Remove([StoryBoardOwnerControl]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...