Главная » Silverlight » Выбор частей и состояний

0

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

Очевидно, для объекта FlipPanel необходимы два состояния.

•       Normal (Обычное). Раскадровка обеспечивает видимость передней стороны. Со­держимое обратной стороны плавно удалено с экрана.

•       Flipped (Перевернутое). Раскадровка обеспечивает видимость обратной стороны. Содержимое передней стороны удалено.

Кроме того, необходимы две части.

•       FlipButton (Перевернуть). При щелчке удаляется передняя сторона и выводится обратная (или наоборот). Панель FlipPanel предоставляет процедуры обработ­ки щелчка.

•       FlipButtonAlternate (Вернуть). Необязательный элемент. Работает так же, как FlipButton. Добавление FlipButtonAlternate позволяет применить в шаблоне два разных способа переворачивания: с помощью одной общей кнопки или двух кнопок (по одной на каждой стороне панели).

Можно также добавить части для областей содержимого передней и обратной сто­рон. Однако FlipPanel не обязательно должна манипулировать областями содержимо­го непосредственно, потому что шаблоны предоставляют анимации, которые скрыва­ют или выводят области. Другой вариант: определите части таким образом, чтобы явно управлять видимостью в коде. Тогда панель можно будет переворачивать, скрывая или выводя соответствующий раздел, даже если анимации не определены. Для простоты примера этот вариант в FlipPanel не реализован.

Чтобы применить части и состояния, нужно добавить атрибуты Template Part в класс элемента управления.

[TemplateVisualState(Name = "Normal",

GroupName="ViewStates")]

[TemplateVisualState(Name = "Flipped",

GroupName = "ViewStates")]

[TemplatePart(Name = "FlipButton",

Type = typeof (ToggleButton))]

[TemplatePart(Name = "FlipButtonAlternate", Type = typeof(ToggleButton))]

public class FlipPanel : Control

{ … }

Части FlipButton и FlipButtonAlternate могут быть только классами ToggleButton или наследовать класс ToggleButtont. В главе 5 показано, что кнопка ToggleButton может находиться в одном из двух состояний. В примере с FlipPanel состояния ToggleButton соответствуют обычному и перевернутому состояниям панели.

Совет. Чтобы шаблон был как можно более гибким, используйте наименее специальные типы элементов. Например, лучше применить класс FrameworkElement, чем ContentControl (естественно, если не нужны дополнительные свойства и методы, предоставляемые классом ContentControl).

Соглашения об именовании частей, состояний и групп состояний

Задавая имена частей и состояний, не употребляйте префиксы и суффиксы. Например, используйте имена Flipped и FlipButton вместо Flippedstate и FlipButtonPart. Исключение составляют группы состояний, имена которых всегда должны заканчиваться суффиксом states, например viewStates.

Полезно найти аналогичные элементы управления в инфраструктуре Silverlight и применить те же имена. Особенно это относится к состояниям, определенным в группе CommonStates (состояния Normal, MouseOver, Pressed и Disabled) и в группе FocusStates (состояния Focused И Unfocused). Не забывайте, что в потребителе элемента управления должно использоваться то же имя. Если создать элемент управления, аналогичный кнопке, в ко­тором нарушены соглашения (например, использовано имя Clicked вместо Pressed), то при создании потреби­теля элемента управления легко забыть об этом и применить стандартное имя состояния Pressed. Тогда анимация будет проигнорирована.

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

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