Show / Hide Table of Contents

Практическое руководство. Упрощение анимации с помощью дочерних шкал времени

В этом примере показано, как Упрощение анимации с помощью дочерних ParallelTimeline объектов. Объект Storyboard — это разновидность Timeline , предоставляющий сведения о содержащихся в нем временных шкал. Используйте Storyboard для предоставления временной шкалы, предназначенных для сведения, включая сведения объекта и свойством.

Чтобы начать анимацию, используйте один или несколько ParallelTimeline объектов в качестве вложенных дочерних элементов Storyboard. Эти ParallelTimeline объекты могут содержать другие анимации и таким образом, что позволяет лучше инкапсулировать временные последовательности в сложных анимациях. Например, при анимации TextBlock и нескольких фигур в одном Storyboard, можно разделить анимации для TextBlock и фигур, помещая каждую из них в отдельную ParallelTimeline. Так как каждый ParallelTimeline имеет свой собственный BeginTime и все дочерние элементы ParallelTimeline отсчитываются относительно этого BeginTime, время инкапсулируется лучше.

В следующем примере выполняется анимация двух фрагментов текста (TextBlock объектов) из внутри того же Storyboard. Объект ParallelTimeline инкапсулирует анимации одного из TextBlock объектов.

Замечание о производительности: Несмотря на то, что можно вложить Storyboard временных шкал друг в друга, ParallelTimelineбольше подходят для вложения, так как они требуют меньше издержек. ( Storyboard Класс наследует от ParallelTimeline класса.)

Пример

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Canvas >

    <!-- TextBlock with text "ParallelTimelines are..." that gets animated. -->
    <TextBlock Name="FirstTextBlock" Canvas.Top="30" Canvas.Left="300" FontSize="24" >
      ParallelTimelines are...
      <TextBlock.RenderTransform>
        <TransformGroup>
          <SkewTransform x:Name="FirstTextBlockSkew" CenterX="25" CenterY="25" AngleX="0" AngleY="0" />
        </TransformGroup>
      </TextBlock.RenderTransform>
    </TextBlock>

    <!-- TextBlock with text "Useful" that gets animated. -->
    <TextBlock Name="SecondTextBlock" Opacity="0" Canvas.Top="30" Canvas.Left="585" FontSize="24" >
      Useful
      <TextBlock.RenderTransform>
        <TransformGroup>
          <SkewTransform x:Name="SecondTextBlockSkew" CenterX="25" CenterY="25" AngleX="0" AngleY="0" />
          <ScaleTransform x:Name="SecondTextBlockScale" CenterX="0" CenterY="24" />
        </TransformGroup>
      </TextBlock.RenderTransform>
    </TextBlock>

    <!-- Event Trigger that controls all animations on the page. -->
    <Canvas.Triggers>
      <EventTrigger RoutedEvent="Canvas.Loaded">
        <BeginStoryboard>
          <Storyboard>

            <!-- "ParallelTimelines are..." fades into view. -->
            <DoubleAnimation Storyboard.TargetName="FirstTextBlock"
            Storyboard.TargetProperty="Opacity" Duration="0:0:2" From="0" To="1" />

            <!-- "ParallelTimelines are..." skews to the left. -->
            <DoubleAnimation Storyboard.TargetName="FirstTextBlockSkew"
            Storyboard.TargetProperty="AngleX" Duration="0:0:1" BeginTime="0:0:2" From="0" To="45" />

            <!-- This ParallelTimeline contains all the animations for the TextBlock with the text
            "Useful" in it. This ParallelTimeline begins 4 seconds after the Storyboard timeline begins and all child
            animations begin relative to this parent timeline. -->
            <ParallelTimeline BeginTime="0:0:4">

              <!-- "Useful" fades into view. -->
              <DoubleAnimation Storyboard.TargetName="SecondTextBlock"
              Storyboard.TargetProperty="Opacity" Duration="0:0:2" From="0" To="1" />

              <!-- "Useful" slides in from the right. -->
              <DoubleAnimation Storyboard.TargetName="SecondTextBlockSkew"
              Storyboard.TargetProperty="AngleX" Duration="0:0:2" From="90" To="180" />

              <!-- "Useful" skews to the right. -->
              <DoubleAnimation Storyboard.TargetName="SecondTextBlockSkew"
              Storyboard.TargetProperty="AngleX" BeginTime="0:0:3" Duration="0:0:0.2" From="0" To="-60" />

              <!-- "Useful" Gets taller. -->
              <DoubleAnimation Storyboard.TargetName="SecondTextBlockScale"
              Storyboard.TargetProperty="ScaleY" BeginTime="0:0:3" Duration="0:0:0.2" From="1" To="3" />
            </ParallelTimeline>
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger>
    </Canvas.Triggers>
  </Canvas>
</Page>

См. также

  • Общие сведения об эффектах анимации
  • Задание значения свойства HandoffBehavior для анимаций раскадровки
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX