Главная » Silverlight » Конфигурирование свойств анимации

0

Чтобы полностью использовать возможности, предоставляемые объектами анима­ции, подробнее рассмотрим свойства анимационных классов, включая такие свойства, как From, То и Duration. Все они применялись в предыдущих примерах, однако с их по­мощью можно создавать и более тонкие эффекты.

Свойство From

Свойство From содержит начальное значение изменяемого свойства. В предыдущем примере анимация кнопки начинается с ширины 160 пикселей. Объект анимации мож­но сконфигурировать таким образом, чтобы при каждом щелчке ширина кнопки опять устанавливалась равной 160 пикселям и анимация выполнялась с начала, даже если щелчок произошел, когда анимация еще выполняется.

Примечание. В данном примере видна еще одна особенность анимации Silverlight: каждое зависимое свойство в каждый момент времени может изменяться только одной анимацией. Если запустить вторую анимацию, первая будет отменена.

Необходимо учитывать, что при использовании текущего значения в качестве начальной точки анимации может измениться скорость. Это объясняется тем, что свойство Duration не переустанавливается, следовательно, шаг анимации становится меньше. Предположим, щелчок произошел, когда кнопка почти достигла максимальной ширины. Началась новая анимация. Однако ее продолжительность, заданная свойством Duration, осталась рав­ной 5 секундам, даже если осталось пройти несколько пикселей. В результате эти не­сколько пикселей будут пройдены аж за 5 секунд, и движение будет очень медленным.

Данный эффект заметен только при повторном запуске почти завершенной анима­ции. Выглядит он странно, однако большинство разработчиков предпочитают не тра­тить время на кодирование процедур для его устранения. Принято считать этот эффект допустимой странностью.

Свойство То

Свойство То можно опустить, так же как и свойство From. Фактически можно опу­стить оба свойства.

<DoubleAnimation Storyboard.TargetName="cmdGrow" Storyboard.TargetProperty="Width" Duration="0:0:5">

</DoubleAnimatіon>

На первый взгляд кажется, что мы отдали Silverlight многословный приказ ничего не делать. Когда оба свойства опущены, они по умолчанию имеют одно и то же значение. Однако между ними существует тонкое, но важное отличие, обусловленное тем, что за­висимые свойства From и То получают значения от многих провайдеров свойств.

Когда опущено свойство From, используется его текущее значение с учетом анима­ции. Например, когда ширина кнопки прошла половину пути, в свойстве From хранится значение ширины, видимое на экране в данный момент времени. А вот когда опущено свойство То, используется текущее значение без учета анимации. В свойстве То нахо­дится исходное значение, установленное последний раз в коде, в дескрипторе элемента или с помощью стиля. Встроенная в Silverlight система разрешения зависимых свойств получает их значения от нескольких провайдеров свойств, не отбрасывая никакую ин­формацию (разрешение зависимых свойств подробно рассматривается в главе 4).

В примере с кнопкой это приводит к тому, что если запустить расширение кнопки, а затем прервать анимацию, запустив другую анимацию (например, щелкнув на другой кнопке), кнопка сократится от текущего размера до исходного, установленного в раз­метке XAML. С другой стороны, если запустить этот процесс, когда не выполняется никакая другая анимация, ничего не произойдет, потому что свойства From (анимиро- ванная ширина) и То (исходная ширина) получают одно и то же значение.

Свойство By

Свойство By задает шаг изменения. Его можно использовать вместо свойства То, за­дающего конечное значение. Приведенная ниже разметка создает анимацию, увеличи­вающую ширину кнопки на каждом шаге на 10 пикселей.

<DoubleAnimation Storyboard.TargetName="cmdGrow" Ву="10" Storyboard.TargetProperty="Width" Duration="0:0:5">

</DoubleAnimat ion>

Щелчок на кнопке всегда приводит к увеличению ее ширины, независимо от теку­щей ширины кнопки и того, сколько раз запускалась анимация.

Свойство By доступно не во всех анимационных классах. Например, оно не име­ет смысла при использовании нечисловых типов данных, таких как структура Color в объекте ColorAnimation.

Свойство Duration

Свойство Duration содержит временной интервал (в миллисекундах, секундах, минутах, часах и любых других единицах времени), в течение которого выполняется анимация. Продолжительность анимации может задаваться объектом типа TimeSpan, однако свойство Duration фактически содержит объект типа Duration. К счастью, типы TimeSpan и Duration почти аналогичны. В структуре Duration определено неявное при­ведение (при необходимости) типа System.TimeSpan к типу System.Windows.Duration, поэтому следующий код работоспособен.

widthAnimation.Duration = TimeSpan.FromSeconds(5);

Зачем же тогда создатели Silverlight ввели новый тип? В классе Duration определе­ны два специальных значения Duration.Automatic и Duration.Forever, которые не­возможно представить в объекте TimeSpan. В предыдущем примере оба эти свойства бесполезны. Свойство Automatic всего лишь устанавливает продолжительность анимации равной 1 секунде, а свойство Forever устанавливает бесконечную продолжительность. Если установить его для кнопки в предыдущем примере, ширина кнопки после щелчка изменяться не будет (когда отведено бесконечно много времени, торопиться незачем).

Однако свойство Duration. Forever полезно при создании обратимой анимации, в которой свойству AutoReverse присвоено значение True. Обратимая анимация сна­чала увеличивает, а затем уменьшает ширину кнопки до исходного значения. Если же установлено еще и свойство Forever, этот процесс продолжается бесконечно.

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии