воскресенье, 17 октября 2010 г.

Шаблоны в WPF 4. Часть 1. Введение.

Свойства и стили определяют внешний вид элемента управления и его поведение. Например, свойства элемента управления Slider, такие как TickFrequency, TickPlacement, Background и Width помогают определить его внешний вид, в то время как свойства Minimum, Maximum, LargeChange, и IsEnabled помогают определить его поведение.

Обзор шаблонов

Если вы внимательно посмотрите на рисунок 1, вы сможете увидеть, что элемент управления Slider состоит из набора частей, включающих:

- границу (border)

- отметки шкалы (tick marks)

- фоновое изображение (background)

- область фонового изображения, по которой можно кликнуть, которая изменяет конкретное значение (clickable area). Обычно она располагается где-то между верхней частью элемента управления и вертикальными отметками шкалы.

- меру длины (thumb), показывающую конкретное значение, которое вы можете перемещать назад и вперед

- индикаторы выбора (selection indicators), которые отображают выбранный диапазон. (маленькие черные треугольники).

image

рис. 1

Эти составляющие представлены частями, которые образуют Slider.  По умолчанию, Slider сделан из совокупности элементов управления Border, Grid, TickBar, Track, RepeatButton, Rectangle, Thumb, Canvas и Path со многими кистями (brushes), трансформациями (transformations), стилями (styles) и триггерами (triggers).

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

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

(Да, могут быть некоторые, которые сложно сопоставить с машиной, такие как гибрид роботизированного транспортного средства www.botmag.com/articles/mule.shtml , летающие машины http://www.theregister.co.uk/2008/07/29/terrafugia_transition_on_show_oshkosh/ , Toyota PM www.toyota.com/concept-vehicles/pm.html , которые выглядят больше похоже на гоночный болид из Звездных войн, чем на автомобиль, но я еще не видел их на дороге).

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

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

Предупреждение:

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

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

 

Об этом и гораздо больше можно прочитать в книге: WPF Programmers Reference with C# 2010 and .NET 4 (EN).

Комментариев нет:

Отправить комментарий