Главная » Разработка для Windows Phone 7 » Введение в стили Windows Phone 7

0

Одним из самых распространенных элементов в коллекции Resources является Style, который по сути является набором значений свойств для конкретного типа элементов. Кроме ключа, Style также требует задания TargetType (Целевой тип):

<Style x:Key="txtblkStyle"

TargetType="TextBlock">

</Style>

Между открывающим и закрывающим тегами размещается одно или более описаний Setter. У Setter два свойства: одно из них называется Property (Свойство), и в качестве его значения задается имя свойства; другое – Value (Значение). Приведем несколько примеров:

<Style x:Key="txtblkStyle"

TargetType="TextBlock"> <Setter Property="HorizontalAlignment" Value="Center" /> <Setter Property="VerticalAlignment" Value="Center" /> <Setter Property="Margin" Value="12 96" /> <Setter Property="FontSize" Value="48" /> </Style>

Предположим, мы хотим также включить Setter для свойства Foreground, но его значением является LinearGradientBrush. Существует два способа сделать это. Если ранее был описан ресурс с ключом «brush» (как в проекте ResourceSharing), можно вставить ссылку на этот ресурс:

<Setter Property="Foreground" Value="{StaticResource brush}" />

Или можно прибегнуть к синтаксису свойства-элемента для свойства Value и встроить кисть прямо в описание Style. Вот как это сделано в коллекции Resources в проекте StyleSharing:

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

<phone:PhoneApplicationPage.Resources> <Style x:Key="txtblkStyle"

TargetType="TextBlock"> <Setter Property="HorizontalAlignment" Value="Center" /> <Setter Property="VerticalAlignment" Value="Center" /> <Setter Property="Margin" Value="12 96" /> <Setter Property="FontSize" Value="48" /> <Setter Property="Foreground"> <Setter.Value>

<LinearGradientBrush>

<GradientStop Offset="0" Color="Pink" /> <GradientStop Offset="1" Color="SkyBlue" /> </LinearGradientBrush> </Setter.Value> </Setter> </Style>

</phone:PhoneApplicationPage.Resources>

Чтобы применить этот стиль к элементу типа TextBlock, зададим свойство Style (которое определено в FrameworkElement, так что доступно всем типам элементов):

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

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

Style="{StaticResource txtblkStyle}" HorizontalAlignment="Left" VerticalAlignment="Top" />

<TextBlock Text="Fuhgedaboudit!"

Style="{StaticResource txtblkStyle}" HorizontalAlignment="Right" VerticalAlignment="Bottom" />

</Grid>

Изображение на экране ничем не отличается от вывода предыдущего приложения, что весьма поучительно. Таким образом, значения HorizontalAlignment и VerticalAlignment определены в Style, но переопределены локальными параметрами в двух элементах TextBlock. А значение Foreground, заданное в Style, переопределяет значение, наследуемое по дереву элементов.

Итак, теперь мы можем немного дополнить схему, начатую ранее в данной главе: Локальные параметры имеют приоритет над

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

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

По теме:

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