Общие сведения о характере поведения во времени
В этом разделе описывается характер изменения во времени поведения анимации и других объектов Timeline.
Предварительные требования
Для понимания этого раздела требуется знакомство с основными возможностями анимации. Дополнительные сведения см. в разделе Общие сведения об эффектах анимации.
Типы временной шкалы
Timeline представляет сегмент времени. Он предоставляет свойства, позволяющие задать длину этого сегмента, время его запуска, количество повторов, скорость течения времени в этом сегменте и многое другое.
Классы, которые наследуют классу временной шкалы, обеспечивают дополнительные функциональные возможности, такие как анимация и воспроизведение мультимедиа. WPF предоставляет следующие типы Timeline.
Тип шкалы времени |
Описание |
---|---|
Абстрактный базовый класс для объектов Timeline, порождающих выходные значения для свойств анимации. |
|
Создает выходные данные из файла мультимедиа. |
|
Тип шкалы времени TimelineGroup, который группирует дочерние объекты Timeline и управляет ими. |
|
Тип ParallelTimeline, который предоставляет целевые сведения о содержащихся в нем объектах временной шкалы. |
|
Абстрактный базовый класс, определяющий характер поведения во времени. |
|
Абстрактный класс для объектов Timeline, которые могут содержать другие объекты Timeline. |
Свойства, управляющие длиной временной шкалы
Timeline представляет сегмент времени, а длину временной шкалы можно описать различными способами. В следующей таблице приводятся разные термины для описания длины временной шкалы.
Термин |
Описание |
Свойства |
|||
---|---|---|---|---|---|
Простая длительность |
Интервал времени, который требуется, чтобы временная шкала совершила одну итерацию. |
||||
Одно повторение |
Интервал времени, который требуется, чтобы временная шкала совершила воспроизведение в прямом направлении один раз, и, если свойство AutoReverse имеет значение true, то еще воспроизведение в обратном направлении один раз. |
||||
Активный период |
Интервал времени, который требуется, чтобы временная шкала выполнила все повторения, заданные ее свойством RepeatBehavior. |
Свойство "Длительность"
Как было сказано выше, временная шкала представляет собой сегмент времени. Длина этого сегмента определяется свойством Duration временной шкалы. Когда временная шкала достигает конца своей длительности, воспроизведение прекращается. Если временная шкала имеет дочерние временные шкалы, то они также останавливают воспроизведение. В случае анимации свойство Duration определяет, как долго анимация выполняет переход от ее начального значения до конечного. Длительность временной шкалы иногда называют простой длительностью, чтобы различать продолжительность одной итерации и общий интервал времени анимации, включая повторения. Можно указать длительность, используя значение времени окончания, а также специальные значения Automatic или Forever. Длительность анимации должна приводить к значению TimeSpan для осуществления перехода между значениями.
В следующем примере показана DoubleAnimation с Duration в пять секунд.
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5" />
Контейнеры временной шкалы, например Storyboard и ParallelTimeline, по умолчанию имеют продолжительность Automatic, то есть они автоматически завершаются после того, как их последний дочерний элемент останавливает воспроизведение. В следующем примере показана Storyboard, чья продолжительность Duration установлена в пять секунд, т.е. время, которое необходимо для завершения всех дочерних объектов DoubleAnimation.
<Storyboard >
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5" />
<DoubleAnimation
Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:3" />
</Storyboard>
Установив продолжительность Duration контейнера временной шкалы в значение TimeSpan, можно принудительно продлить или укоротить воспроизведение его дочерних объектов Timeline. Если задать значение Duration меньше, чем длина контейнера временной шкалы его дочерних объектов Timeline, то дочерние объекты Timeline остановят воспроизведение одновременно с контейнером. В следующем примере устанавливается Duration Storyboard из предыдущего примера в три секунды. В результате первая DoubleAnimation останавливается после трех секунд, когда анимируемая ширина прямоугольника достигает 60.
<Storyboard Duration="0:0:3">
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5" />
<DoubleAnimation
Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:3" />
</Storyboard>
Свойство RepeatBehavior
Свойство RepeatBehavior Timeline определяет, сколько раз будет повторяться простая длительность. С помощью свойства RepeatBehavior можно указать число воспроизведений временной шкалы (итерация Count) или общий интервал времени ее воспроизведения (повторение Duration). В любом случае, анимация осуществляет столько проходов от начала до конца, сколько требуется для выполнения заполнения запрошенного числа повторов или длительности. По умолчанию временные шкалы имеют число итераций, равное 1.0, то есть воспроизведение происходит один раз и не повторяется.
В следующем примере свойство RepeatBehavior используется, чтобы заставить DoubleAnimation воспроизвести ее простую длительность два раза, указав счетчик итераций.
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
RepeatBehavior="2x" />
В следующем примере с помощью свойства RepeatBehavior, задается воспроизведение DoubleAnimation половины простой длительности.
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
RepeatBehavior="0.5x" />
Если установить свойство RepeatBehavior Timeline в Forever, то Timeline будет повторяться до остановки в интерактивном режиме или до остановки системой времени. В следующем примере с помощью свойства RepeatBehavior, задается бесконечное воспроизведение DoubleAnimation.
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
RepeatBehavior="Forever" />
Дополнительный пример см. в разделе Практическое руководство. Повторение анимации.
Свойство AutoReverse
Свойство AutoReverse указывает, будет ли каждая итерация Timeline воспроизводиться еще и в обратном направлении. В следующем примере для свойства AutoReverse анимации DoubleAnimation задается значение true; в результате чего анимация выполняется от нуля до 100, а затем от 100 до нуля. Воспроизведение длится всего 10 секунд.
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
AutoReverse="True" />
Если значение Count задано для свойства RepeatBehavior Timeline, а свойство AutoReverse шкалы Timeline имеет значение true, то простое повторение состоит из одной прямой итерации и одной обратной. В следующем примере для свойства RepeatBehavior анимации DoubleAnimation из предыдущего примера в значение Count, равное двум. В результате анимация DoubleAnimation воспроизводится в течение 20 секунд: в прямом направлении в течение пяти секунд, в обратном направлении в течение пяти секунд, снова в прямом в течение пяти секунд, а затем в обратном направлении в течение пяти секунд.
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
RepeatBehavior="2"
AutoReverse="True" />
Если контейнер временной шкалы имеет дочерние объектыTimeline, то они изменяют направление вместе с контейнером временной шкалы. Дополнительные примеры см. в разделе Практическое руководство. Определение автоматического реверса для шкалы времени.
Свойство BeginTime
Свойство BeginTime позволяет указать, когда должна запускаться временная шкала. Время начала временной шкалы измеряется относительно ее родительской шкалы времени. Время начала в ноль секунд означает, что временная шкала начинается сразу после запуска ее родителя; любое другое значение задает смещение между началом воспроизведения родительской временной шкалы и дочерней. Например, время начала, равное двум секундам, означает, что временная шкала начинает воспроизведение, когда ее родительская шкала уже будет воспроизводиться в течение двух секунд. По умолчанию все временные шкалы имеют нулевое время начала. Можно также установить начало временной шкалы в null, что предотвратит ее запуск. В WPF можно указать значение Null с помощью Расширение разметки x:NULL.
Обратите внимание, что время начала не применяется при каждом повторении временной шкалы из-за установки RepeatBehavior. Если необходимо создать анимацию с BeginTime, равным 10 секундам, и RepeatBehavior, имеющим значение Forever, то будет выполнена 10-секундная задержка перед воспроизведением анимации первый раз, но не для каждого успешного повторения. Однако если родительская шкала анимации была перезапущена или повторена, то 10-секундная задержка будет происходить.
СвойствоBeginTime удобно использовать для сдвига временной шкалы. В следующем примере создается Storyboard, который имеет два дочерних объекта DoubleAnimation. Первая анимация имеет длительность Duration пять секунд, а вторая ― длительность Duration 3 секунды. В примере устанавливается время начала BeginTime второй анимацииDoubleAnimation, равное 5 секундам, так что она начинает воспроизведение после завершения первой DoubleAnimation.
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
BeginTime="0:0:0" />
<DoubleAnimation
Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:3"
BeginTime="0:0:5" />
</Storyboard>
Свойство FillBehavior
Когда Timeline достигает конца своей общей активной продолжительности, свойство FillBehavior определяет, должна ли она остановиться или сохранить последнее значение. Анимация со свойством FillBehavior, имеющим значение HoldEnd, сохраняет свое выходное значение: свойство, для которого выполнялась анимация, сохраняет последнее значение анимации. Значение Stop указывает, что по завершении анимация прекращает воздействовать на целевое свойство.
В следующем примере создается Storyboard, который имеет два дочерних объекта DoubleAnimation. Оба объекта DoubleAnimation анимируют свойство Width класса Rectangle от 0 до 100. У элементов Rectangle есть неанимируемые значения Width из 500 аппаратно-независимых пикселей.
Свойство FillBehavior первой анимации DoubleAnimation по умолчанию устанавливается в значение HoldEnd. В результате ширина прямоугольника остается равной 100 после завершения анимации DoubleAnimation.
Свойство FillBehavior второй анимации DoubleAnimation устанавливается в значение Stop. В результате свойство Width второго прямоугольника Rectangle возвращается к значению 500 после завершения анимации DoubleAnimation.
<Rectangle Name="MyRectangle"
Width="500" Height="100"
Opacity="1" Fill="Red">
</Rectangle>
<Rectangle Name="MyOtherRectangle"
Width="500" Height="100"
Opacity="1" Fill="Orange">
</Rectangle>
<Button Content="Start FillBehavior Example">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
FillBehavior="HoldEnd" />
<DoubleAnimation
Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
FillBehavior="Stop" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
Свойства, управляющие скоростью временной шкалы
Класс Timeline предоставляет три свойства для задания скорости шкалы:
SpeedRatio ― указывает скорость относительно родительской шкалы, в которой течет время для Timeline. Значения больше единицы увеличивают скорость Timeline и ее дочерних объектов Timeline; значения между 0 и единицей замедляют скорость. Значение, равное единице, указывает, что время Timeline течет с той же скоростью, что и у родителя. Установка SpeedRatio для контейнера временной шкалы также влияет на все его дочерние объекты Timeline.
AccelerationRatio ― указывает процент длительности Duration временной шкалы, затраченный на ускорение. Пример см. в разделе Практическое руководство. Ускорение или замедление анимации.
DecelerationRatio ― указывает процент длительности Duration временной шкалы, затраченный на замедление. Пример см. в разделе Практическое руководство. Ускорение или замедление анимации.
См. также
Основные понятия
Общие сведения об эффектах анимации
Общие сведения об анимации и системе управления временем
Общие сведения о временных событиях