Программирование >>  Программирование с использованием ajax 

1 ... 362 363 364 [ 365 ] 366 367 368 ... 396


В этом разделе речь пойдет о двух основных средствах.

□ Стили. Наборы свойств, применяемые к элементу управления одним пакетом.

□ Шаблоны. Элементы управления, применяемые для построения изображения элемента управления.

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

Стили

у элементов управления WPF есть свойство под названием Style (унаследованное от FrameworkElement), которое может устанавливаться в экземпляр класса Style. Класс Style является довольно сложным и способен предоставлять усовершенствованные средства стилизации, но в своей основе он, по сути, представляет собой просто набор объектов Setter. Каждый объект Setter отвечает за установку значения свойства в соответствии со значением своего свойства Property (содержащим имя устанавливаемого свойства) и значением своего свойства Value (содержащим значение, которое нужно установить для данного свойства). Можно либо полностью квалифицировать имя требуемого свойства в Property, т.е. указывать в нем и тип элемента управления, к которому оно относится (например. Button. Foreground), либо устанавливать значение для свойства TargetType объекта Style (например, Button), чтобы тот сам мог выводить имена свойств. Приведенный ниже код тогда показывает, как использовать объект Style для установки свойства Foreground элемента управления Button:

<Button> Click me! <Button.Style> <Style TargetType= Button > <Setter Property= Foreground > <Setter.Value>

<SolidColorBrush Color= Purple /> </Setter.Value> </Setter> </Style> </Button.Style> </Button>

Очевидно, что в данном случае было бы гораздо проще установить свойство Foreground кнопки обычным образом. Стми становятся гораздо более полезными тогда, когда превращаются в ресурсы, поскольку ресурсы могут применяться снова и снова. То, как именно стми могут превращаться в ресурсы, будет показано позже в этой главе.

Шаблоны

Элементы управления создаются с помощью шаблонов, которые можно настраивать. Любой шаблон состоит из иерархии элементов управления, применяемых для построения изображения данного элемента, в состав которой может входить также и элемент управления типа ContentPresenter, отвечающий за отображение содержимого элементов, которые, как, например, кнопки, таковым обладают.

Шаблон элемента управления хранится в его свойстве Template, которое является экземпляром класса ControlTemplate. Класс ControlTemplate включает свойство TargetType, принимающее в качестве значения тип того элемента управления, для которого определяется шаблон, и может содержать только один элемент управления. Этим элементом управления может быть и контейнер вроде Grid, так что возможности это в принципе никак особо не ограничивает.



Обычно шаблон устанавливается для класса применением стиля. Это просто подразумевает предоставление элементов управления, подлежащих использованию для свойства Template, следующим образом:

<Button> Click me <Button.Style> <Style TargetType= Button > <Setter Property= Ten5>late > <Setter.Value >

<ControlTemplate TargetType= Button >

</ControlTemplate>

</Setter.Value> </Setter> </Style> </Button.Style> </Button>

Некоторым элементам управления может требоваться более одного шаблона. Например, для CheckBox необходим один шаблон (CheckBox. Template) для отображения ячейки для отметки и еще один (CheckBox. ContentTemplate) - для вывода рядом с этой ячейкой соответствующего текста.

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

Заменять шаблоны наиболее полезно в сочетании с применением ресурсов. Однако поскольку стилизация элементов управления является очень распространенным приемом, будет не лишним посмотреть, как именно она выполняется, в следующем практическом занятии.

Практическое занятие., Применение стилей и шаблонов

1. Создайте новое WPF-приложение по имени Ch34Ex03 и сохраните его в каталоге

C:\BegVCSharp\Chapter34.

2. Измените код в его файле Windowl .xaml следующим образом:

<Window x:Class= Ch34Ex03.Windowl xmlns= http: schemas.microsoft.com/winfх/2006/xaml/presentation xmlns:x= http: schemas.microsoft.com/winfx/2006/xaml Title= Nasty Button Height= 150 Width= 550 > <Grid Background= Black > <Button Margin= 20 Click= Button Click > Would anyone use a button like this? <Button.Style> <Style TargetType= Button > <Setter Property= FontSize Value= 18 /> <Setter Property= FontFamily Value= arial /> <Setter Property= FontWeight Value= bold /> <Setter Property= Foreground > <Setter.Value>

<LinearGradientBrush StartPoint= 0.5,0 EndPoint= 0.5,1 > <LinearGradientBrush.GradientStops > <GradientStop Offset= 0.0 Color= Purple /> <GradientStop Offset= 0.5 Color= Azure />



<GradientStop Offset= 1.0 Color= Purple /> </LinearGradientBrush.GradientStops > </LinearGradientBrush> </Setter.Value> </Setter>

<Setter Property= Template > <Setter.Value>

<ControlTemplate TargetType= Button > <Grid>

<Grid.ColumnDefinitions> <ColumnDefinition Width= 50 /> <ColumnDefinition /> <ColumnDefinition Width= 50 /> </Grid.ColumnDefinitions > <Grid.RowDefinitions> <RowDefinition MinHeight= 50 /> </Grid.RowDefinitions> <Ellipse Grid.Column= 0 Height= 50 > <Ellipse.Fill> <RadialGradientBrush> <RadialGradientBrush.GradientStops> <GradientStop Offset= 0.0 Color= Yellow /> <GradientStop Offset= 1.0 Color= Red /> </RadialGradientBrush.GradientStops> </RadialGradientBrush> </Ellipse.Fill> </Ellipse> <Grid Grid.Column= l > <Rectangle RadiusX= 10 RadiusY= 10 > <Rectangle.Fill> <RadialGradientBrush> <RadialGradientBrush.GradientStops> <GradientStop Offset= 0.0 Color= Yellow /> <GradientStop Offset= 1.0 Color= Red /> </RadialGradientBrush.GradientStops > </RadialGradientBrush> </Rectangle.Fill> </Rectangle>

<ContentPresenter Margin= 20, 0, 20, 0

HorizontalAlignment= Center VerticalAlignment= Center /> </Grid>

<Ellipse Grid.Column= 2 Height= 50 > <Ellipse.Fill> <RadialGradientBrush> <RadialGradientBrush.GradientStops> <GradientStop Offset= 0.0 Color= Yellow /> <GradientStop Offset= 1.0 Color= Red /> </RadialGradientBrush.GradientStops> </RadialGradientBrush> </Ellipse.Fill> </Ellipse> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </Button.Style> </Button> </Grid> </Window>



1 ... 362 363 364 [ 365 ] 366 367 368 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика