Pergunta

O que é a maneira correta de parar e reiniciar um storyboard de código .net?

Eu estou tentando ...

myStory.Stop(this);

Esperando que uma chamada subsequente para .Begin (this); iria reiniciar a partir do cronograma em zero, mas em vez disso, o storyboard começa exactamente onde parou.

Eu tentei

.Remove(this);

e eu tentei

.Seek(TimeSpan.Zero); 

que também não funcionou.

Mais detalhes ... Aqui é minha amostra 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>

Assim, o texto nos textone corridas, e se você fechar a tela, e retornar para a tela rapidamente, o texttwo, realmente desempenha ao longo de um storyboard recém-iniciado. Assim, o original (a partir da primeira tela) storyboard é ainda ao redor e jogar, embora eu tenha removido, e parou.

Foi útil?

Solução

Que tal usar Storyboard.Seek (TimeSpan.Zero)? Semelhante ao que procuram em um Stream, isso deve trazer de volta para o início da animação.

eu comentei que você também deve certificar-se de que a propriedade IsControllable é definido como verdadeiro. Tenha isso em mente!

Storyboard.Seek método

Outras dicas

Você precisa fazer myStory.Remove (isso) antes de chamar myStory.Begin (this) para tê-lo começar de novo a partir do zero. Isso ocorre porque chamar Storyboard :: Parar apenas pára os relógios de animação, mas deixa intactas. A chamada subsequente Para começar, vai simplesmente agir como um currículo. Concordo que isso é um pouco contra-intuitivo, no entanto, se você ler a documentação ClockController :: Parar , você verá o seguinte nas observações:

Este método altera do relógio alvo CurrentState para Parado.

Um relógio parado pode ser reiniciado usando o Begin, Seek, ou método SeekAlignedToLastTick.

Desculpe Scott, eu não estava prestando atenção. Você tentou definir o FillBehavior no Storyboard. Defina o FillBehavior de Paragem repõe a animação. Não tenho certeza por que parar não fazê-lo embora ...

<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;

, em seguida, criar um novo storyboard

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

o storyboard "storyboard_name" será iniciado.

Se você quiser parar a tentativa storyboard.please como este

storyboard_name.Stop();

Se você quiser remover a tentativa storyboard.please como este

storyboard_name.Remove();

outros detalhes podem ser:

this.MyAnimation.FillBehavior = FillBehavior.Stop;

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top