2014-10-02 2 views
7

Я полный новичок в WPF и XAML.Многоразовые анимации

Я создал простой плавное и постепенное исчезновение из анимации для текстового поля: -

<Storyboard x:Key="storyFadeInOutTop" Name="storyFadeInOutTop"> 
    <DoubleAnimation From="0" To="1" Duration="00:00:01" 
        Storyboard.TargetName="txtTopCredit" 
        Storyboard.TargetProperty="Opacity"> 
    </DoubleAnimation> 
    <DoubleAnimation From="10" To="0" Duration="00:00:01" BeginTime="00:00:01" 
        Storyboard.TargetName="blurTop" 
        Storyboard.TargetProperty="Radius"> 
    </DoubleAnimation> 
    <DoubleAnimation From="0" To="10" Duration="00:00:01" BeginTime="00:00:05" 
        Storyboard.TargetName="blurTop" 
        Storyboard.TargetProperty="Radius"> 
    </DoubleAnimation> 
    <DoubleAnimation From="1" To="0" Duration="00:00:01" BeginTime="00:00:06" 
        Storyboard.TargetName="txtTopCredit" 
        Storyboard.TargetProperty="Opacity"> 
    </DoubleAnimation> 
</Storyboard> 

То, что я хотел бы сделать, это запустить этот раскадровки несколько раз в lifecyle анимации.

Что-то вроде: -

<Storyboard> 
    <!-- (Run my fade-in-fade out with BeginTime of 00:00:00) --> 
    <StringAnimationUsingKeyFrames Duration="00:00:01" BeginTime="00:00:07" 
      Storyboard.TargetName="txtTopCredit" 
      Storyboard.TargetProperty="Text"> 
      <DiscreteStringKeyFrame Value="Game design and concept by" KeyTime="0:0:1" /> 
    </StringAnimationUsingKeyFrames> 
    <!-- (Run my fade-in-fade out again with BeginTime of 00:00:07) --> 
    <StringAnimationUsingKeyFrames Duration="00:00:01" BeginTime="00:00:07" 
      Storyboard.TargetName="txtTopCredit" 
      Storyboard.TargetProperty="Text"> 
      <DiscreteStringKeyFrame Value="Look Ive changed to another credit" KeyTime="0:0:1" /> 
    </StringAnimationUsingKeyFrames> 
    <!-- (etc etc) --> 
</Storyboard> 

Я надеюсь, вы понимаете суть того, что я пытаюсь сделать. Я знаю, что могу просто добавить код в раскадровку к каждому разделу выше, но это было бы очень утомительно. Есть ли элегантный способ сделать это?

+0

Примечание: O.K. Поэтому я немного поработал и использовал код для запуска и остановки раскадровки, а также обработчиков событий для управления секвенированием при их запуске. Было бы неплохо узнать, есть ли способ сделать это в чистом XAML. –

+2

Думаю, вам лучше управлять этими анимациями кодом (к сожалению). –

ответ

1

Вы должны быть в состоянии установить RepeatBehavior свойство на раскадровке (inherited from Timeline)

<Storyboard x:Key="storyFadeInOutTop" Name="storyFadeInOutTop" RepeatBehavior="Forever"> 
    <DoubleAnimation From="0" To="1" Duration="00:00:01" 
        Storyboard.TargetName="txtTopCredit" 
        Storyboard.TargetProperty="Opacity"> 
    </DoubleAnimation> 
    <DoubleAnimation From="10" To="0" Duration="00:00:01" BeginTime="00:00:01" 
        Storyboard.TargetName="blurTop" 
        Storyboard.TargetProperty="Radius"> 
    </DoubleAnimation> 
    <DoubleAnimation From="0" To="10" Duration="00:00:01" BeginTime="00:00:05" 
        Storyboard.TargetName="blurTop" 
        Storyboard.TargetProperty="Radius"> 
    </DoubleAnimation> 
    <DoubleAnimation From="1" To="0" Duration="00:00:01" BeginTime="00:00:06" 
        Storyboard.TargetName="txtTopCredit" 
        Storyboard.TargetProperty="Opacity"> 
    </DoubleAnimation> 
</Storyboard> 

RepeatBehavior также может быть установлен на положительное целое число.

Смежные вопросы