Главная » Разработка для Windows Phone 7 » Триггер по событию Loaded Windows Phone 7

0

Windows Presentation Foundation обеспечивает большую гибкость в описании и использовании анимаций, чем Silverlight. WPF включает объекты, называемые триггерами, которые отвечают на события или на изменения свойств, и которые могут реализовывать запуск анимаций полностью в XAML, устраняя необходимость запуска Storyboard в файле выделенного кода. В Silverlight триггеры практически не используются, их почти полностью заменил Visual State Manager (Диспетчер визуальных состояний), который мы обсудим в следующей главе.

Но все-таки один триггер в Silverlight остался. Это триггер, отвечающий на событие Loaded. Он позволяет полностью описывать анимацию в XAML, обеспечивая ее запуск сразу после загрузки страницы (или другого элемента).

Проект FadelnOnLoaded (Проявление при загрузке) включает следующий XAML, который располагается ближе к концу кода страницы, непосредственно над закрывающим тегом PhoneApplicationPage. Это традиционное место размещения триггеров, срабатывающих по событию:

<phone:PhoneApplicationPage.Triggers> <EventTrigger>

<BeginStoryboard> <Storyboard>

<DoubleAnimation Storyboard.TargetName="TitlePanel" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:10" /;

</Storyboard> </BeginStoryboard> </EventTrigger> </phone:PhoneApplicationPage.Triggers>

Разметка начинается с тега свойства-элемента для свойства Triggers (Триггеры), описанного FrameworkElement. Свойство Triggers типа TriggerCollection (Коллекция триггеров), что кажется довольно всеобъемлющим и универсальным, но в Silverlight в эту коллекцию можно поместить лишь тег EventTrigger (Триггер, срабатывающий по событию), который всегда ассоциирован с событием Loaded. Далее следует тег BeginStoryboard (Начать раскадровку). Это единственное место в Silverlight, где можно увидеть тег BeginStoryboard. И наконец, что- то знакомое: Storyboard с одной или более анимациями, целью которых может быть любой объект-зависимость любого объекта страницы.

Целью данной анимации является свойство Opacity объекта TitlePanel. TitlePanel – это TitlePanel, включающий два заголовка вверху страницы. Я задал для анимации продолжительность 10 секунд, чтобы мы ничего не упустили. Как только страница загружается, плавно проявляется ее заголовок:

Также можно применять анимации к свойствам типа Color, т.е. можно анимировать цвета кисти. Рассмотрим приложение, в котором выполняется анимация свойств Color двух объектов GradientStop в LinearGradientBrush:

Проект Silverlight: GradientAnimation Файл: MainPage.xaml (фрагмент)

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Grid HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock Text="GRADIENT" FontSize="9 6" FontWeight="Bold"> <TextBlock.Foreground>

<LinearGradientBrush>

<GradientStop x:Name="gradientStop1"

Offset="0" Color="Red" /> <GradientStop x:Name="gradientStop2"

Offset="1" Color="Blue" /> </LinearGradientBrush> </TextBlock.Foreground> </TextBlock>

<Grid.Triggers>

<EventTrigger>

<BeginStoryboard> <Storyboard>

<ColorAnimation Storyboard.TargetName="gradientStop1" Storyboard.TargetProperty="Color" From="Red" To="Blue" Duration="0:0:11" AutoReverse="True" RepeatBehavior="Forever" />

<ColorAnimation Storyboard.TargetName="gradientStop2" Storyboard.TargetProperty="Color" From="Blue" To="Red" Duration="0:0:13" AutoReverse="True" RepeatBehavior="Forever" />

</Storyboard> </BeginStoryboard> </EventTrigger> </Grid.Triggers> </Grid> </Grid>

Для этих двух анимаций продолжительность задана простыми числами 11 и 13, так что весь цикл, включая AutoReverse, будет длиться почти 5 минут и затем повторяться снова.

Источник: Чарльз Петзольд, Программируем Windows Phone 7, Microsoft Press, © 2011.

По теме:

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