Подтвердить что ты не робот

Как остановить анимацию в С#/WPF?

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

В зависимости от того, как вы используете это значение, это может быть не то поведение, которое вы хотите. Второй способ - установить анимацию 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);

Ответ 4

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

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

Из MSDN

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

Ответ 5

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

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

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

[StoryBoardName].Remove([StoryBoardOwnerControl]);