Question

Quel est le bon moyen d'arrêter et de redémarrer un storyboard à partir de code .net?

j'essaie ...

myStory.Stop(this);

S'attend à ce qu'un appel ultérieur à .Begin (this); redémarrera à zéro à partir de la timeline, mais le storyboard reprend là où il avait été arrêté.

j'ai essayé

.Remove(this);

et j'ai essayé

.Seek(TimeSpan.Zero); 

qui n'a pas non plus fonctionné.

Plus de détails ... Voici mon exemple de storyboard.

<Storyboard x:Key="overlay">
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textone" Storyboard.TargetProperty="(UIElement.Opacity)">
        <SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="0"/>
        <SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="1"/>
        <SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="1"/>
        <SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="texttwo" Storyboard.TargetProperty="(UIElement.Opacity)">
        <SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="0"/>
        <SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="1"/>
        <SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="1"/>
        <SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
</Storyboard>

Le texte dans le textone est donc exécuté. Si vous fermez l’écran et revenez rapidement à l’écran, le texttwo sera lu par-dessus un nouveau scénarimage. Ainsi, le story-board original (du premier écran) est toujours en cours de lecture, même si je l'ai supprimé et arrêté.

Était-ce utile?

La solution

Pourquoi ne pas utiliser Storyboard.Seek (TimeSpan.Zero)? Semblable à la recherche dans un flux, cela devrait vous ramener au début de l’animation.

J'ai commenté que vous devriez également vous assurer que la propriété IsControllable est définie sur true. Gardez cela à l'esprit!

Méthode Storyboard.Seek

Autres conseils

Vous devez effectuer myStory.Remove (this) avant d'appeler myStory.Begin (this) pour que tout recommence à zéro. En effet, l'appel de Storyboard :: Stop arrête simplement les horloges d'animation, mais les laisse intactes. Un appel ultérieur à Begin servira simplement de CV. Je conviens que cela est un peu contre-intuitif, toutefois, si vous lisez la documentation ClockController :: Stop , vous verrez ce qui suit dans les remarques:

  

Cette méthode modifie l'horloge cible   CurrentState to Stopped.

     

Une horloge arrêtée peut être redémarrée par   en utilisant les commandes Begin, Seek ou   Méthode SeekAlignedToLastTick.

Désolé Scott, je ne faisais pas attention. Avez-vous essayé de définir FillBehavior sur le Storyboard. Définissez FillBehavior sur Stop pour réinitialiser l'animation. Vous ne savez pas pourquoi Stop ne le fait pas ...

<Storyboard x:Key="overlay">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textone" Storyboard.TargetProperty="(UIElement.Opacity)">
    <SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="0"/>
    <SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="1"/>
    <SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="1"/>
    <SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="texttwo" Storyboard.TargetProperty="(UIElement.Opacity)">
    <SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="0"/>
    <SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="1"/>
    <SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="1"/>
    <SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="0"/>
</DoubleAnimationUsingKeyFrames>

 using System.Windows.Media.Animation;

puis créez un nouveau storyboard

 Storyboard storyboard_name = (Storyboard)(FindResource("overlay")); 
 storyboard_name.Begin();

le storyboard " storyboard_name " va commencer.

si vous voulez arrêter le storyboard.Veuillez essayer comme ça

storyboard_name.Stop();

si vous souhaitez supprimer le storyboard.Veuillez essayer comme ceci

storyboard_name.Remove();

les autres détails peuvent être:

this.MyAnimation.FillBehavior = FillBehavior.Stop;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top