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

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

 barProgress.BeginAnimation (RangeBase.ValueProperty, новый DoubleAnimation (
     barProgress.Value, dNextProgressValue,
     new Duration (TimeSpan.FromSeconds (dDuration)));

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

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

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

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

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

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

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

Из MSDN

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

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

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

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

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

   .........      

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

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

 [StoryBoardName].Remove([StoryBoardOwnerControl]); 
  • Создание BitmapImage из массива байтов
  • Имя свойства INotifyPropertyChanged - hardcode vs reflection?
  • Уведомлять ObservableCollection при изменении позиции
  • Как установить ViewModel в окне в XAML с использованием свойства DataContext?
  • Печать документа WPF FlowDocument
  • Стиль windows WPF MessageBox
  • Что означает «{Binding Path =.}» В привязке WPF?
  • Используйте «real» CultureInfo.CurrentCulture в привязке WPF, а не CultureInfo от IetfLanguageTag
  • Продолжение задачи в streamе пользовательского интерфейса
  • Что такое имена столбцов DataTable с точками, что делает их непригодными для управления DataGrid WPF?
  • Прокрутите список в WPF в определенную строку
  • Давайте будем гением компьютера.