Вопрос

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

Я пытаюсь ...

myStory.Stop(this);

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

Я пытался

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Этот метод изменяет текущее состояние целевых часов на остановленное.

Остановленные часы можно перезапустить, используя метод Begin, Seek или Seekalignedtolastick.

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

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

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

это.Моя имитация.Заполняющее поведение = заполняющее поведение.Остановка;

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top