Элементы управления стилем (Styling Controls) в Silverlight - Шаблоны и скиннинг
ОГЛАВЛЕНИЕ
Шаблоны и скиннинг
Иногда вам может понадобиться (полностью) изменить внешний вид элемента управления полностью, придав ему совершенно новый вид без каких-либо изменений в его функциональности. Тут уместно применять шаблоны Silverlight, менеджер визуальных состояний (Visual State Manager) и модель частей и состояния (Parts and State Model).
Это как раз тот случай, когда легче сделать, чем объяснить. Простым, но эффективным способом распределения объекта будет триангуляция - просмотр объекта с двух и более точек обзора. Аналогичный эффект я наблюдаю при изучении чего-нибудь нового и запутанного, и в таких случаях полезно рассматривать объект с нескольких точек.
Модель частей и состояний
Silverlight обладает некоторыми радикальными изменениями по сравнению с предыдущими технологиями (такими, как ASP.NET, WinForms и т.д.). В старых технологиях каждый элемент имел свой определенный внешний вид, и мы, как разработчики, были несколько ограничены в использовании стилей и, впоследствии, скиннинга. В Silverlight каждый элемент управления, предоставленный компанией Microsoft, поддерживает новую модель частей и состояний (Parts and States Model), которая вызывает строгую сеперацию между логикой элемента управления и его внешним видом.
Преимуществом данного подхода является то, что разработчик может с легкостью изменить внешний вид элемента отдельно от его функциональности, тем самым обладая свободой в действиях, особенно при работе с дизайнерами. Внешний вид инкапсулирован в шаблоне, использующем модель Parts and State, и регулируетсяменеджером визуальных состояний (Visual State Manager) (VSM). Expression Blend знает, как читать и создавать части и состояния, тем самым делая скиннинг элементов управления практически тривиальной задачей ... во всяком случае тогда, когда вы знаете, как это сделать.
Модель частей и состояний построена на следующих ключевых принципах:
- Части (Parts)
- Состояния (States) и Группы состояний (State Groups)
- Переходы (Transitions)
Части (Parts)
Часть это названный элемент в пределах элемента управления. Это важно когда вы создаете шаблоны для специализированных элементов управления.
Состояния и группы состояний
Каждый элемент управления имеет несколько состояний ("States") - определенных разработчиком элемента управления. Как показано на рисунке 6-11, кнопка имеет четыре стандартных состояния ("Common States")
- Normal - нормальное
- MouseOver - наведенное
- Pressed - нажатое
- Disabled - отключенное
А также она обладает двумя состояниями фокуса ("Focus States")
- Focused - сфокусированное
- Unfocused - без фокуса
Обратите внимание на то, что вторые два состояния выделены в отдельную группу состояний. Идея заключается в том, чтобы создавать группы для уменьшения потенциального "взрыва" комбинаций состояний (то есть используя группы состояний, вы потенциально уменьшаете количество различных состояний с 64 до 12, путем разделения смешанных состояний в группы по три или четыре)
Рисунок 6-11. Button States and State Groups
Переходы
То, что показано на рисунке 6-11 является обходным путем - я вырезал маркеры времени переходов для того, чтобы упростить изображение, которое в оригинале должно выглядеть следующим образом
Рисунок 6-12. Состояния со значениями времени
Цифры, которые я обвел являются временами переходов (измеряются в секундах). Они указывают длительность перехода из одного состояния к другому.
Два значения, которые обведены красным цветом, являются стандартными для двух групп состояний, в то время как два значения, обведенные белым цветом, являются переписанными. Если вы исследуете тщательнее изображение, то увидите стрелку со звездочкой, которая показывает состояние MouseOver, тем самым указывая, что данный промежуток времени в 0.2 секунды необходим для перехода из любого состояния в состояние MouseOver, и во втором случае 0.1 секунды - для переключения из любого состояния в Pressed. То, что произойдет во время перехода, определяется самим переходом (Transition), который является раскадровкой (основой анимации) и будет описан ниже. Основной идеей переходов является возможность избегать прыжков из одного состояния в другое, а также более гладкое изменение между состояниями.
Опять же, исследовав существующий шаблон, мы можем понять, как элементы управления, предоставленные компанией Microsoft, обрабатывают данные переходы. Щелкните по состоянию Pressed в режиме Object and Timeline - State изменяется в Pressed и подсвечиваются две части: Background Gradient (фоновый градиент) и Downstroke (подчеркивание).
При расширении данных частей при помощи стрелок, мы увидим те подчасти, которые были изменены при переходе кнопки в состояние Pressed, как это показано на рисунке 6-13
Рисунок 6-13. Исследуем шаблон на Button Pressed
Обратите внимание на то, что под фоновым градиентом заливка состоит из четырех остановок Gradient и что все четыре изменяют свои цвета, но второй изменяет также и свое положение. Вы можете нажать на каждый цвет поочереди и, исследовав окошко свойств и/или Xaml, увидеть все изменения. Это особенно важно в случае со второй остановкой, когда изменяются цвет и расположение, как это показано на рисунке 6-14
Рисунок 6-14. Состояние нажатой кнопки (Button Pressed)