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

У меня примерно так:

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
48
0
60 055
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Ответ принят как подходящий

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

Будь осторожен. Это не сработает, если вы укажете HandoffBehavior.Compose. Подробнее см. msdn.microsoft.com/en-us/library/ms590757%28v=VS.90%29.aspx. Обратите внимание на документ для параметра анимации.

LukeN 23.06.2011 05:03

Повторный вызов BeginAnimation, похоже, не останавливает «часы» анимации первой анимации. По истечении указанного времени анимация вызывает событие Completed. Is не вызывается напрямую при вызове BeginAnimation, а скорее, когда Animation закончил бы.

BatteryBackupUnit 08.06.2015 15:49

Пожалуйста, покажите мне, как установить второй аргумент в значение null в vb.net ??? myStoryboard.Begin(containingObject:=Me, isControllable:=True, handoffBehavior:=Animation.HandoffBehavior.SnapshotAndReplac‌​e)

Herry Markowitz 18.03.2019 06:08

@HerryMarkowitz в vb.net использует ключевое слово Nothing. - docs.microsoft.com/en-us/dotnet/visual-basic/language-refere‌ nce /…

BrainSlugs83 06.07.2020 22:45

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

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

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

Плюс один к вам, мне было интересно, почему моя анимация не реагирует на "Стоп"!

Joon 03.06.2010 23:07

Да, да, да, это сработало. Это пропущенное "истина" сводило меня с ума :)

Johan Danforth 16.08.2011 13:28

ты легенда! это сводило меня с ума!

Mark Staff 14.09.2011 07:36

Вопрос касается анимации, а не раскадровки (как отвечает этот ответ).

SandRock 31.01.2013 19:37

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

Из MSDN

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

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

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

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

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

Не забудьте также вызвать Storyboard.Remove (this), иначе у вас может произойти утечка памяти, поскольку ваш FrameworkElement будет хранить ссылку на раскадровку. Я только что нашел в своем коде экземпляр, в котором простая остановка и замена анимации оставляли более 4000 анимаций укоренившимися после нескольких недель работы.

LukeN 23.06.2011 05:07

Есть два способа остановить 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);

Я согласен. Это дает ответ на вопрос, относящийся конкретно к запросу OP для анимации, а не к раскадровке, и предоставляет два хороших варианта.

Grim 26.02.2016 15:17

Обратите внимание, это не работает, если вы используете HandoffBehavior.Compose.

BrainSlugs83 06.07.2020 22:49

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

[StoryBoardName].Remove([StoryBoardOwnerControl]);

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

StopStoryBoard не поддерживается в проекте Windows Presentation Foundation (WPF)

Simon Smith 08.09.2016 18:52

@SimonSmith StopStoryBoard поддерживается в WPF!

Rekshino 09.01.2021 13:58

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