Архив

Записи с меткой «расширителя»

Expander управления в Silverlight Toolkit

6 ноября 2008 6 комментариев

Введение

Я написал HeaderedContentControl и Expander для Silverlight Toolkit. Они оба существуют в WPF, и я написал, чтобы они больше совместимы с WPF, насколько возможно. Но есть и существенные различия между WPF и Silverlight, так что не удивительно, контролирует на эти две платформы отличаются, как хорошо. Различия в основном вызвано различиями системы DependencyProperty между WPF и Silverlight, Silverlight и новые инновации, как TemplatePart и VisualState. Там было несколько направлений поиска, чтобы мой блог по ключевым словам "Silverlight", "расширитель", я думал, что я должен написать пост о разработке и реализации HeaderedContentControl и Expander, так что здесь вы идете.

HeaderedContentControl

HeaderedContentControl наследует от ContentControl, добавив два заголовка DependencyProperty и HeaderTemplate и два защищенных виртуальных функций OnHeaderedChanged и OnHeaderTemplateChanged. Ниже приведены HeaderedContentControl в Silverlight Toolkit и WPF. Различия в основном новые функции, добавленные в WPF 3.5, как и HeaderStringFormat OnHeaderStringFormatChanged и платформы различия между WPF и Silverlight, как HeaderTemplateSelector, LogicalChildren и HasHeader и т.д.

HeaderedContentControl in Silverlight Toolkit

Рисунок 1: HeaderedContentControl в Silverlight Toolkit

HeaderedContentControl in WPF

Рисунок 2: HeaderedContentControl в WPF

Вы можете проверить HeaderedContentControl обзор и играть с образцами из Silverlight Toolkit страницы CodePlex.

Расширитель

Пользовательский интерфейс

Expander является подклассом HeaderedContentControl, добавив, что поведение сворачивание / разворачивание его содержание области. Silverlight Toolkit главная страница имеет экран выстрел настроенные Expander:

Silverlight Toolkit

Рисунок 3: Индивидуальный HeaderedContentControl

И примеры, которые вы можете играть с:

Expander Sample

Рисунок 4: HeaderedContentControl образца

Кроме того интерфейс мыши (нажатие заголовка / ToggleButton для развернуть / свернуть), Expander также имеет интерфейс клавиатуры: в зависимости от ExpandDirection, влево / вправо / вверх / вниз клавиши со стрелками можно свернуть или развернуть область Expander Содержимое тоже.

Реализация

Expander добавляет два DependencyProperty IsExpand и ExpandDirection, два события, разворачивать и сворачивать, и связанных с ними защищенных виртуальных методов OnExpanded и OnCollapsed. Ниже приводится реализация Expander в Silverlight Toolkit и WPF:

Expander in Silverlight Toolkit

Рисунок 5: Expander в Silverlight Toolkit

Expander in WPF

Рисунок 6: Expander в WPF

Контракт Управление и настройка

Что нового в Expander в Silverlight Toolkit, по отношению к его коллеге WPF, является контроль контракта:

Expander Control Contract

Рисунок 7: Expander контроль контракта: шаблон частей и визуальных состояний

Expander добавляет два новых визуальных групп государства, кроме общих и фокус-групп:

  • ExpansionStates: Расширение и рухнул

Как будет показано ниже, то по умолчанию шаблон Expander имеет состояние анимации разворачивать и сворачивать государств, используя ObjectAnimationUsingKeyFrames изменить свойства видимости Содержимое области (представлено ExpandSite элемент в шаблон по умолчанию), чтобы показать или скрыть области содержимого. Вы можете настроить развернуть / свернуть поведение легко с Blend, как добавить переход анимация изменить прозрачность области содержимого исчезать это и выход.

Expand State Animation

Рисунок 8: Расширенная анимация государства

  • ExpandDirectionStates: ExpandDown, ExpandUp, ExpandLeft и ExpandRight

Expander имеет четыре различных значения ExpandDirection, каждый имеет свой макет. Чтобы разрешить пользователям настроить шаблон Expander, должен быть способ указать четыре макета в шаблоне так Expander код знает, какой из них выбрать, какие компоненты, чтобы показать / спрятать в соответствии с ExpandDirection собственности. Управления, как слайдер и использовать ScrollBar TemplatePart:

ScrollBar Control Contract

Такой подход не очень хорошо масштабируется: Expander имеет четыре схемы, таким образом много шаблонов частей. И каждый макет должен обрабатывать Расширенное / рухнул переходы по отдельности. Чтобы избежать этой проблемы, я представил состояние ExpandDirectionStates визуальные группы, так что пользователи могут изменить внешний вид при обработке ExpandDirectionStates, что смесь обеспечивает хорошую поддержку. Я должен указать один шаблон части: заголовок ToggleButton, потому что Silverlight не допускают два способа связывания, так что я должен связать с Expander.IsExpanded ToggleButton.IsChecked в коде Expander, чтобы обеспечить развернуть / свернуть пользователей. Таким образом, Таким образом, управление контрактом намного чище и гораздо более гибкий, как легко добавить RotateTransform для поворота
Expander в новый формат, когда изменения ExpandDirection. На снимке экрана показано, как шаблон по умолчанию обрабатывает все четыре макета:

  • Весь заголовок шаблонов ToggleButton, так что в любом случае нажатия на заголовок может развернуть / свернуть Содержимое области.
  • Она использует 2 × 2 сетки в заголовке формы и содержания территории.
  • Он излагает Expander по ExpandDirection имея состояние анимации ExpandDirectionStates:
    • Он излагает заголовок и содержание областях оживляющий их Grid.Row и Grid.Column свойствами.
    • Он обращает заголовке переключатель правильно, изменив его шаблон.

ExpandDirection state animation

Рисунок 9: ExpandLeft государства анимации


Заключение

Как всегда, надеюсь, это поможет и комментарии / предложения / отзывы и т.д. приветствуются. Спасибо!

Technorati Теги: , ,