Domanda

Ho qualcosa del genere:

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

Ora, come fermeresti quell'animazione (the DoubleAnimation)?Il motivo per cui voglio farlo è perché vorrei iniziare nuove animazioni (sembra funzionare, ma è difficile dirlo) ed eventualmente interrompere l'ultima animazione...

È stato utile?

Soluzione

Per fermarlo, chiama BeginAnimation di nuovo con il secondo argomento impostato su null.

Altri suggerimenti

Quando utilizzi gli storyboard per controllare un'animazione, assicurati di impostare il secondo parametro su true per impostare l'animazione come controllabile:

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

Esistono due modi per interrompere BeginAnimation.Il primo consiste nel chiamare nuovamente BeginAnimation con il secondo parametro impostato su null.Ciò rimuoverà tutte le animazioni sulla proprietà e ripristinare il valore torna al suo valore base.

A seconda di come utilizzi quel valore, questo potrebbe non essere il comportamento desiderato.Il secondo modo è impostare le animazioni BeginTime su null e quindi chiamare BeginAnimation con esso.Ciò rimuoverà l'animazione specifica e lascerà il valore nella posizione corrente.

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 vuoi che il valore di base ritorni di nuovo il valore effettivo, devi impedire all'animazione di influenzare la proprietà.Ci sono tre modi per farlo con le animazioni dello storyboard:

  • Imposta la proprietà Fillbehavior dell'animazione per fermare
  • Rimuovi l'intero Storyboard
  • Rimuovi l'animazione dalla proprietà individuale

Da MSDN

Come:Imposta una proprietà dopo averla animata con uno storyboard

Nel mio caso ho dovuto utilizzare due comandi, il mio xaml ha un pulsante che attiva un trigger e il suo trigger attiva l'animazione dello storyboard.

Ho inserito un pulsante per interrompere l'animazione con questo codice dietro:

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

Non mi piace ma qui funziona davvero.Provaci!

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

Posiziona l'animazione in uno StoryBoard.Chiama Begin() e Stop() nello storyboard per iniziare a interrompere le animazioni.

Puoi usare questo codice:

[StoryBoardName].Remove([StoryBoardOwnerControl]);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top