Перезапуск раскадровки WPF - PullRequest
8 голосов
/ 07 мая 2009

Как правильно остановить и перезапустить раскадровку из кода .net?

Я пытаюсь ...

myStory.Stop(this);

Ожидается, что последующий вызов .Begin (this); будет перезапущен с временной шкалы с нуля, но вместо этого раскадровка подхватит то место, где оно было остановлено.

Я пытался

.Remove(this);

и я попробовал

.Seek(TimeSpan.Zero); 

, который тоже не работал.

Подробнее ... Вот мой пример раскадровки.

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

Таким образом, текст в тексте запускается, и если вы закроете экран и быстро вернетесь к экрану, texttwo фактически будет воспроизводиться поверх только что начатой ​​раскадровки. Таким образом, оригинальная (с первого экрана) раскадровка все еще работает, хотя я удалил ее и остановил.

Ответы [ 5 ]

9 голосов
/ 08 мая 2009

А как насчет использования Storyboard.Seek (TimeSpan.Zero)? Подобно поиску в потоке, это должно вернуть вас к началу анимации.

Я прокомментировал, что вы также должны убедиться, что свойство IsControllable имеет значение true. Имейте это в виду!

Раскадровка. Метод поиска

3 голосов
/ 07 мая 2009

Вам нужно будет выполнить myStory.Remove (this) перед вызовом myStory.Begin (this), чтобы запустить его с нуля. Это потому, что вызов Storyboard :: Stop просто останавливает часы анимации, но оставляет их нетронутыми. Последующий вызов Begin, будет просто выступать в качестве резюме. Я согласен, что это несколько нелогично, однако, если вы прочитаете документацию ClockController :: Stop , вы увидите следующее в комментариях:

Этот метод изменяет целевые часы CurrentState to Stopped.

Остановленные часы могут быть перезапущены используя начало, поиск или Метод SeekAlignedToLastTick.

0 голосов
/ 21 января 2014

другие детали могут быть:

this.MyAnimation.FillBehavior = FillBehavior.Stop;

0 голосов
/ 04 июня 2012
<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;

затем создайте новую раскадровку

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

запустится раскадровка "storyboard_name".

если вы хотите остановить раскадровку. Попробуйте вот так

storyboard_name.Stop();

если вы хотите удалить раскадровку. Попробуйте вот так

storyboard_name.Remove();
0 голосов
/ 27 мая 2009

Извините, Скотт, я не обращал внимания. Вы пытались установить FillBehavior на раскадровке. Установите для параметра FillBehavior значение Stop, чтобы сбросить анимацию. Не уверен, почему Стоп не делает этого, хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...