Ответ 1
Чтобы остановить его, снова вызовите BeginAnimation
а второй аргумент - null
.
У меня есть что-то вроде этого:
barProgress.BeginAnimation(RangeBase.ValueProperty, new 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);
Мне это не нравится, но он действительно работает здесь. Попробуйте!
<Trigger.EnterActions>
<BeginStoryboard x:Name="myStory">
.........
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<StopStoryboard BeginStoryboardName="myStory"/>
</Trigger.ExitActions>
Поместите анимацию в StoryBoard. Call Begin() и Stop() на раскадровке, чтобы остановить анимацию.
Вы можете использовать этот код:
[StoryBoardName].Remove([StoryBoardOwnerControl]);