Главная » Разработка для Windows Phone 7 » Анимации и приоритетность свойств Windows Phone 7

0

Примеры данной главы включают небольшое приложение ButtonSetAndAnimate (Задание и анимация кнопки), которое не делает ничего особенно полезного, кроме как иллюстрирует место анимации в иерархии приоритетности свойств-зависимостей.

XAML-файл описывает Slider с диапазоном от 0 до 100, TextBlock, отображающий значение Slider, и четыре кнопки:

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

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">

<Grid.RowDefinitions>

<RowDefinition Height="Auto" /> <RowDefinition Height="*" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />

</Grid.RowDefinitions>

<Grid.ColumnDefinitions>

<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />

</Grid.ColumnDefinitions>

<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding ElementName=slider, Path=Value}" HorizontalAlignment="Center" Margin="24" />

<Slider Name="slider"

Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Minimum="0" Maximum="10 0" Orientation="Horizontal" VerticalAlignment="Center" />

<Button Grid.Row="2" Grid.Column="0" Content="Set to 0" Click="OnSetToZeroClick" />

<Button Grid.Row="2" Grid.Column="1" Content="Set to 100" Click="OnSetToOneHundredClick" />

<Button Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Content="Animate to 50" HorizontalAlignment="Center" Click="OnAnimateTo50Click" />

<Button Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Content="Set Maximum to 25" HorizontalAlignment="Center" Click="OnSetMaxTo4 0Click" />

</Grid>

Также в XAML-файле имеется анимация, целью которой является свойство Value объекта Slider.

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

<phone:PhoneApplicationPage.Resources> <Storyboard x:Name="storyboard">

<DoubleAnimation Storyboard.TargetName="slider"

Storyboard.TargetProperty="Value" To="50" Duration="0:0:5" />

</Storyboard> </phone:PhoneApplicationPage.Resources>

Обработчики кнопок описаны в файле выделенного кода:

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

public partial class MainPage : PhoneApplicationPage {

public MainPage()

InitializeComponent();

void OnSetToZeroClick(object sender, RoutedEventArgs args) slider.Value = 0;

void OnSetToOneHundredClick(object sender, RoutedEventArgs args) slider.Value = 100;

void OnAnimateTo50Click(object sender, RoutedEventArgs args) storyboard.Begin();

void OnSetMaxTo4 0Click(object sender, RoutedEventArgs e) slider.Maximum = 25;

}

Вот что мы получаем на экране:

Slider можно перемещать, проводя по нему пальцем или задавая его предельно допустимые значения посредством двух верхних кнопок. Так себе. Теперь щелкнем кнопку «Animate to 50» (Переместить с помощью анимации в значение 50).

В процессе анимации Slider и его перемещения в центральное положение попробуйте изменить это поведение, проводя по элементу пальцем или нажимая кнопки «Set to 0» (Задать равным 0) или «Set to 100». Никакого эффекта. Анимация имеет приоритет над локальными параметрами. Это означает, что схема приоритетности свойств-зависимостей (в последний раз упоминаемая нами в главе 11) должна быть дополнена анимациями, и они должны располагаться в ней в самом верху:

Анимации имеют приоритет над

Локальными параметрами, которые имеют приоритет над Настройками стиля, которые имеют приоритет над Стилем темы, который имеет приоритет над

Унаследованными свойствами, которые являются более приоритетными, чем

Значения по умолчанию

Так и должно быть. Анимации должны иметь приоритет над локальными параметрами или они не смогут использоваться для свойств, которые просто инициализированы некоторым значением.

По завершении анимации Slider доступен для манипуляций как посредством сенсорного ввода, так и с помощью двух верхних кнопок. Это поведение не является корректным и не соответствует документации. Используемое для FillBehavior значение по умолчанию HoldEnd должно приводить к «замораживанию» ползунка после окончания анимации. Slider должен сохранять, и его положение должно отражать конечное значение анимации.

Существует ли что-либо более приоритетное, чем анимации? Да, существует, но вряд ли это сразу придет вам в голову, и вряд ли вы сможете найти примеры этому вне Slider и ScrollBar.

Зададим Slider его максимальное значение и снова нажмем кнопку «Animate to 50». В момент, когда Slider почти достиг значения 50, щелкнем кнопку «Set Maximum to 25». Тем самым свойству Maximum объекта Slider будет задано значение 25, и анимация будет немедленно остановлена. И опять же все выглядит логичным. Независимо от того что делает анимация, Slider нет никакого смысла, чтобы значение его свойства Value выходило за рамки диапазона допустимых значений, определяемого свойствами Minimum и Maximum. Это пример принудительного задания свойства:

Принудительное задание свойства имеет приоритет над

Анимациями, которые являются более приоритетными, чем

Локальные параметры, которые имеют приоритет над

Настройками стиля, которые имеют приоритет над

Стилем темы, который имеет приоритет над

Унаследованными свойствами, которые являются более приоритетными, чем

Значения по умолчанию

Теоретически значения шаблонных свойств также должны быть включены в эту схему между локальными параметрами и настройками стиля. Но поскольку их тяжело дифференцировать, в данной книге остановимся на таком виде этой схемы.

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

По теме:

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