Pergunta
Eu tenho algo assim:
barProgress.BeginAnimation(RangeBase.ValueProperty, new DoubleAnimation( barProgress.Value, dNextProgressValue, new Duration(TimeSpan.FromSeconds(dDuration)));
Agora, como você interromperia essa animação (o DoubleAnimation
)?A razão pela qual quero fazer isso é porque gostaria de iniciar novas animações (isso parece funcionar, mas é difícil dizer) e eventualmente parar a última animação...
Solução
Para parar, ligue BeginAnimation
novamente com o segundo argumento definido como null
.
Outras dicas
Ao usar storyboards para controlar uma animação, certifique-se de definir o segundo parâmetro como true para definir a animação como controlável:
public void Begin(
FrameworkContentElement containingObject,
**bool isControllable**
)
Existem duas maneiras de interromper um BeginAnimation.A primeira é chamar BeginAnimation novamente com o segundo parâmetro definido como nulo.Isso removerá todas as animações da propriedade e reverter o valor de volta ao seu valor base.
Dependendo de como você está usando esse valor, esse pode não ser o comportamento desejado.A segunda maneira é definir as animações BeginTime como nulas e chamar BeginAnimation com elas.Isso removerá aquela animação específica e deixará o valor na posição atual.
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);
Se você deseja que o valor base se torne o valor efetivo novamente, deve impedir que a animação influencie a propriedade.Existem três maneiras de fazer isso com as animações do Storyboard:
- Defina a propriedade Fillbehavior da animação para parar
- Remova todo o Storyboard
- Remova a animação da propriedade individual
Do MSDN
No meu caso tive que usar dois comandos, meu xaml tem um botão que dispara um gatilho, e seu gatilho dispara a animação do storyboard.
Coloquei um botão para parar a animação com este código por trás:
MyBeginStoryboard.Storyboard.Begin(this, true);
MyBeginStoryboard.Storyboard.Stop(this);
Eu não gosto disso, mas realmente funciona aqui.De uma chance!
<Trigger.EnterActions>
<BeginStoryboard x:Name="myStory">
.........
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<StopStoryboard BeginStoryboardName="myStory"/>
</Trigger.ExitActions>
Coloque a animação em um StoryBoard.Chame Begin() e Stop() no storyboard para iniciar e interromper as animações.
Você pode usar este código:
[StoryBoardName].Remove([StoryBoardOwnerControl]);