У меня примерно так:
barProgress.BeginAnimation(RangeBase.ValueProperty, new DoubleAnimation(
barProgress.Value, dNextProgressValue,
new Duration(TimeSpan.FromSeconds(dDuration)));
Как бы вы остановили эту анимацию (DoubleAnimation)? Причина, по которой я хочу это сделать, заключается в том, что я хотел бы запустить новую анимацию (похоже, это работает, но трудно сказать) и в конечном итоге остановить последнюю анимацию ...





Чтобы остановить это, снова вызовите BeginAnimation со вторым аргументом, установленным на null.
Повторный вызов BeginAnimation, похоже, не останавливает «часы» анимации первой анимации. По истечении указанного времени анимация вызывает событие Completed. Is не вызывается напрямую при вызове BeginAnimation, а скорее, когда Animation закончил бы.
Пожалуйста, покажите мне, как установить второй аргумент в значение null в vb.net ??? myStoryboard.Begin(containingObject:=Me, isControllable:=True, handoffBehavior:=Animation.HandoffBehavior.SnapshotAndReplace)
@HerryMarkowitz в vb.net использует ключевое слово Nothing. - docs.microsoft.com/en-us/dotnet/visual-basic/language-refere nce /…
Поместите анимацию на раскадровку. Вызовите Begin () и Stop () в раскадровке, чтобы начать останавливать анимацию.
При использовании раскадровки для управления анимацией убедитесь, что вы установили для второго параметра значение true, чтобы сделать анимацию управляемой:
public void Begin(
FrameworkContentElement containingObject,
**bool isControllable**
)
Плюс один к вам, мне было интересно, почему моя анимация не реагирует на "Стоп"!
Да, да, да, это сработало. Это пропущенное "истина" сводило меня с ума :)
ты легенда! это сводило меня с ума!
Вопрос касается анимации, а не раскадровки (как отвечает этот ответ).
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 анимаций укоренившимися после нескольких недель работы.
Есть два способа остановить 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 для анимации, а не к раскадровке, и предоставляет два хороших варианта.
Обратите внимание, это не работает, если вы используете HandoffBehavior.Compose.
Вы можете использовать этот код:
[StoryBoardName].Remove([StoryBoardOwnerControl]);
<Trigger.EnterActions>
<BeginStoryboard x:Name = "myStory">
.........
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<StopStoryboard BeginStoryboardName = "myStory"/>
</Trigger.ExitActions>
StopStoryBoard не поддерживается в проекте Windows Presentation Foundation (WPF)
@SimonSmith StopStoryBoard поддерживается в WPF!
Будь осторожен. Это не сработает, если вы укажете HandoffBehavior.Compose. Подробнее см. msdn.microsoft.com/en-us/library/ms590757%28v=VS.90%29.aspx. Обратите внимание на документ для параметра анимации.