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

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


3. Измените код в Windowl. xaml. cs, как показано ниже:

public partial class Windowl : Window

private void Button Click(object sender, RoutedEventArgs e)

MessageBox.Show( Button clicked. );

4. Запустите приложение и щелкните один раз на кнопке. На рис. 34.16 показан результат, который должен получиться.


Рис. 34.16. Приложение Ch34Ex03 в действии

Описание полученных результатов

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

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

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

В начале примера идет обычный код для отображения элемента управления Button:

<Button Margin= 20 Click= Button Click > Would anyone use a button like this?

В этом коде для кнопки предоставляются базовые свойства и содержимое. Далее для свойства Style в качестве значения устанавливается объект Style, в котором первым делом задаются три простых свойства, отвечающие за внешний вид шрифта в элементе управления Button:



<Button.Style> <Style TargetType= Button > <Setter Property= FontSize Value= 18 /> <Setter Property= FontFamily Value= arial /> <Setter Property= FontWeight Value= bold />

Затем устанавливается свойство Button. Foreground с применением синтаксиса элементов свойств, поскольку используется кисть:

<Setter Property= Foreground > <Setter.Value>

<LinearGradientBrush StartPoint= 0.5,О 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>

В оставшейся части кода внутри объекта Style свойству Button. Template назначается объект ControlTemplate:

<Setter Property= Template > <Setter.Value> <ControlTemplate TargetType= Button >

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

Код шаблона, в общем, представляет собой элемент управления Grid с тремя ячейками в одной строке. В этих ячейках содержится элемент управления Ellipse, элемент управления Rectangle с элементом управления ContentPresenter для отображения содержимого шаблона, и еще один элемент управления Ellipse:

<Grid>

<Ellipse Grid.Column= 0 Height= 50 > </Ellipse>

<Grid Grid.Column= l > <Rectangle RadiusX= 10 RadiusY= 10 >

</Rectangle >

<ContentPresenter Margin= 20, 0, 20, 0 HorizontalAlignment= Center VerticalAlignment= Center /> </Grid>

<Ellipse Grid.Column= 2 Height= 50 >

</Ellipse> </Grid>

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



Триггеры

В первом примере, который приводился в этой главе, уже показывалось, как триггеры могут применяться для связывания событий с действиями. События в WPF могут включать в себя все что угодно, в том числе и щелчки на кнопках, и события, связанные с запуском приложения, и события, связанные с завершением работы приложения, а также многое другое. На самом деле в WPF существует несколько типов триггеров, причем все они наследуются от базового класса TriggerBase. Триггер, показанный в первом примере, представлял собой триггер типа EventTrigger. Класс EventTrigger содержит коллекцию действий, каждое из которых имеет вид объекта, унаследованного от базового класса TriggerAction. Эти действия выполняются при активизации триггера.

В WPF не очень много классов унаследовано от TriggerAction, но зато разрешено определять свои собственные. Триггер типа EventTrigger можно использовать для воспроизведения анимационных эффектов с помощью действия BeginStoryboard, для манипулирования раскадровкой с помощью действия ControllableStoryboardAction и для добавления звуковых эффектов с помощью действия SoundPlayerAction. Поскольку триггер этого типа наиболее часто применяется в анимационных эффектах, более подробно о нем будет рассказываться в следующем разделе.

У каждого элемента управления есть свойство Triggers, которое можно использовать для определения триггеров прямо на уровне данного элемента управления. Триггеры также можно определять и где-то выше в иерархии, например, как показывалось ранее, на уровне объекта Window. Для стилизации элементов управления чаще всего применяется триггер типа Trigger (хотя для сопровождения элементов управления анимационными эффектами все-таки чаще применяется триггер типа EventTrigger). Класс Trigger используется для установки свойств в ответ на изменения в других свойствах и особенно полезен в объектах Style.

Конфигурируются объекты Trigger следующим образом.

□ Для определения свойства, за которым должен следить объект Trigger, применяется свойство Trigger. Property.

□ Для определения того, когда объект Trigger должен активизироваться, применяется свойство Trigger.Value.

□ Для определения действий, которые должен выполнять объект Trigger, применяется свойство Trigger. Setter с коллекцией объектов Setters в качестве значения.

Упомянутые здесь объекты Setter ничем не отличаются от тех, что описывались ранее в этой главе, в разделе Стили .

Например, приведенный ниже триггер будет анализировать значение свойства MyBooleanValue и, если оно равно true, устанавливать для свойства Opacity значение 0.5:

<Trigger Property= MyBooleanValue Value= true >

<Setter Property= Opacity Value= 0.5 /> </Trigger>

Сам no себе этот код ни о чем особо не говорит, поскольку он не связан ни с одним элементом управления или стилем. Следующий код является гораздо более показательным, поскольку демонстрирует то, как объект Trigger может использоваться в объекте Style:



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

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