Взаимодействие с раскадровками в коде

76

Когда вы создаете анимацию в Expression Blend и делаете это в проекте приложения Silverlight, то при запуске этого приложения на выполнение никакой логики, начинающей анимацию по раскадровке, автоматически не добавляется. С другой стороны, при запуске на выполнение приложения WPF анимация автоматически начинается по раскадровке, когда главное окно приложения загружается в оперативную память, хотя это положение можно впоследствии изменить.

О том, как изменяется этот устанавливаемый по умолчанию режим работы приложения WPF, речь пойдет далее, а до тех пор покажем на рассматриваемом здесь примере проекта, как можно начинать анимацию посредством кода. Что же касается управления раскадровками в разметке, то мы вернемся к этому вопросу, когда будем рассматривать объект поведения типа ControlStoryboardAction.

Прежде всего необходимо решить, какое именно действие пользователя должно привести к началу анимации. Этим действием может стать щелчок на кнопке, выбор пункта меню, щелчок на самом круге, нажатие клавиши или любой другой, специально указываемый вид входной информации от пользователя. В целях рассматриваемого здесь примера допустим, что анимация должна начинаться в том случае, если пользователь щелкнет на элементе управления типа Button. Итак, найдите объект типа Button на панели Tools, но не забывайте, что искать нужные вам элементы управления можно также в библиотеке ресурсов и на панели Assets.

Текст надписи на выбранном объекте типа Button можно изменить, соответственно настроив его свойство Content (Содержимое) в области Common Properties на панели Properties.

Добавив объект типа Button на монтажный стол, переименуйте новый элемент управления пользовательского интерфейса на btnStartAnimation (кнопка начала анимации), воспользовавшись панелью Properties. Далее щелкните на кнопке Events, находящейся на этой же панели, и найдите событие Click, связанное с выбранным объектом типа Button. Дважды щелкните на текстовом поле справа от имени события Click. Теперь в исходном коде текущего проекта вы обнаружите пустой обработчик событий.

Напомним, что в среде Expression Blend IDE элементы раскадровки автоматически сохраняются в качестве ресурса объекта, размещаемого в словаре ресурсов соответствующего объекта типа Window на платформе WPF или же объекта типа UserControl на платформе Silverlight. С учетом этого обстоятельства ваша первая задача по взаимодействию с раскадровками в коде состоит в том. чтобы найти объект раскадровки в коллекции ресурсов по ключевому имени, присвоенному раскадровке при ее создании (это имя AnimateCircle, если вы следовали рассматриваемому ранее примеру). Найдя этот объект, вызовите метод Begin(). Ниже приведен полный код обработчика событий Click():

private void btnStartAnimation_Click(object sender, System.Windows.RoutedEventArgs e)
		{
			Storyboard animCircle;
			animCircle = (Storyboard)this.Resources["AnimateCircle"];
			animCircle.Begin();
		}

Вы, вероятно, уже догадались, что в классе Storyboard определено намного больше функциональных возможностей, чем те, которыми обладает метод Begin(). В частности, в этом классе предоставляются методы Paused и Stop для частичной и полной остановки анимации соответственно, а также целый ряд свойств, с помощью которых определяются те же самые режимы повторения и автоматического изменения на обратное направление воспроизведения анимации, что и расматривавшиеся ранее на панели Properties.

Пройди тесты
Лучший чат для C# программистов