Общие сведения о характере поведения во времени
В этом разделе описан характер поведения анимаций и других Timeline объектов.
Предварительные требования
Для понимания этого раздела необходимо ознакомиться с базовыми средствами анимации. Дополнительные сведения см. в разделе Общие сведения об анимации.
Типы временных шкал
Объект Timeline представляет сегмент времени. Он предоставляет свойства, с помощью которых вы сможете задать длину этого сегмента, время запуска сегмента, количество повторов сегмента, скорость течения времени в этом сегменте и многое другое.
Классы, которые унаследованы от класса временной шкалы, предоставляют дополнительные функции, такие как анимация и воспроизведение мультимедиа. WPF предоставляет следующие Timeline типов.
Тип временной шкалы | Описание |
---|---|
AnimationTimeline | Абстрактный базовый класс для Timeline объекты, которые формируют выходные значения для анимации свойств. |
MediaTimeline | Формирует выходные данные из файла мультимедиа. |
ParallelTimeline | Это разновидность TimelineGroup что дочерние группы и элементы управления Timeline объектов. |
Storyboard | Это разновидность ParallelTimeline , предоставляющий сведения о содержащихся в нем объектов временной шкалы. |
Timeline | Абстрактный базовый класс, который определяет поведение во времени. |
TimelineGroup | Абстрактный класс для Timeline объектов, которые могут содержать другие Timeline объектов. |
Свойства, которые управляют длиной временной шкалы
Объект Timeline представляет сегмент времени и длину временной шкалы можно описать различными способами. В следующей таблице приведены несколько терминов для описания длины временной шкалы.
Термин | Описание | Свойства | |||
---|---|---|---|---|---|
Простая длительность | Длительность, необходимая для одной итерации временной шкалы вперед. | Duration | |||
Одно повторение | Время, необходимое для временной шкалы для воспроизведения вперед, после и, если AutoReverse свойство имеет значение true, обратная однократного воспроизведения. | Duration, AutoReverse | |||
Период активности | Время, необходимое для временной шкалы для выполнения всех повторений, определяемое его RepeatBehavior свойство. | Durationзначение AutoReverseзначение RepeatBehavior |
Свойство Duration
Как упоминалось ранее, временная шкала представляет собой сегмент времени. Длина этого сегмента определяется по временной шкале Duration. Когда временная шкала достигает окончания своей длительности, воспроизведение прекращается. Если у временной шкалы есть дочерние временные шкалы, их воспроизведение также останавливается. В случае анимации Duration указывает, сколько требуется для анимации перехода от начального к конечному значению. Длительность временной шкалы иногда называют его простой длительности, чтобы различать длительность одной итерации и общую длительность воспроизведения анимации с учетом повторов. Можно указать длительность, используя значение времени окончания или специальных значений Automatic или Forever. Длительность анимации должна разрешаться TimeSpan значение перехода между значениями.
В следующем примере показан DoubleAnimation с Duration 5 секунд.
<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
; таким образом, он выполняет анимацию от 0 до 100, а затем от 100 до 0. Суммарное время воспроизведения составляет 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 секунд: вперед в течение пяти секунд, назад в течение пяти секунд, пересылать на 5 секунд, а затем назад в течение пяти секунд.
<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 и 1 — скорость уменьшается. Значение 1 указывает, что Timeline продвижения по тому же тарифу, как его родительский элемент. SpeedRatio Контейнера временной шкалы влияет на все его дочерние Timeline объекты.
AccelerationRatio — Указывает процент Duration временной шкалы, затраченный на ускорение. Пример см. в статье Практическое руководство. Ускорение или замедление анимации.
DecelerationRatio — Указывает процент Duration временной шкалы, затраченный на замедление. Пример см. в статье Практическое руководство. Ускорение или замедление анимации.