.NET / Вышла Elysium Theme 1.2 (Community Technology Preview 2)

в 14:40, , рубрики: metro, theme, wpf, метки: , ,

.NET / Вышла Elysium Theme 1.2 (Community Technology Preview 2)

Некоторое время назад я писал о том, что хочу сделать небольшой open-source проект Elysium. О проекте в целом вы можете прочитать в приведённой статье, сейчас же стоит упомянуть только то, что одна из частей проекта — тема в стиле Metro для WPF. Дело в том, что вчера я выпустил версию 1.2 (CTP 2) этой темы и сегодня хочу поведать о том, что в ней такого особенного реализовано.
О функционале

Изначально планировалось, что Elysium Theme будет именно темой для WPF, т.е. будет просто предоставлять некий набор стилей для стандартных элементов управления. Однако позже стало понятно, что перенести только стиль Metro невозможно: для «полноценного» Metro-приложения необходима своя, особая, инфраструктура. В результате родился некий мини-фреймворк.
В Elysium Theme входят:стили:TextBox, PasswordBox, RichTextBox

Button, RepeatButton, ToggleButton

CheckBox, RadioButton

ListBox, ComboBox

Slider

ContextMenu

ScrollBar, ScrollViewer

TabControl

элементы управления и стили для них:Window — окно в стиле Metro.

LinearProgressBar — заменяет обычный ProgressBar, а также имеет режим Busy, в котором ведёт себя как индикатор загрузки/ожидания.

CircularProgressBar — представляет собой ProgressBar в виде кольца, тоже имеет режим Busy.

ToastNotification — показывает уведомление наподобии toast notifications в Windows 8.

ApplicationBar — да-да, тот самый ApplicationBar из Windows Phone / Windows 8. Панель в нижней части окна, в которой располагаются командные элементы; является заменой традиционного и всплывающего меню. В отличии от Windows 8, является наследником ItemsControl со всеми вытекающими. Может быть использовано не только в Metro Window, но и в обычном окне через вложенные свойства зависимостей (attached dependency property) класса Elysium.Theme.Controls.Window.

CommandButton, ToggleCommandButton — круглые кнопки с подзаголовком (header); предназначены для использования в ApplicationBar, однако могут быть использованы и вне её (наподобии управляющих кнопок в MetroTwit).

DropDownCommandButton — круглая кнопка с выпадающем меню.

Submenu — выпадающее меню для использования в элементах наподобии ComboBox. Используется в DropDownCommandButton.

Как и где это можно использовать?

Использовать тему можно в любом WPF приложении, поскольку она распространяется под лицензией MIT. Вариантов использования два:
Подключение сборки Elysium.Theme.dll

Этот сценарий подразумевает, что вы подключаете всю тему целиком и используете для управления темой встроенные инструменты (ThemeManager, Parameters). Здесь есть несколько интересных моментов:Для своей работы Elysium Theme требует некоторые библиотеки из Microsoft Expression Blend 4 SDK for WPF. Для использования версии Debug (во время разработки приложений) разработчик должен установить этот SDK, и зарегистрировать некоторые библиотеки в GAC с помощью прилагаемых к теме скриптов (bat). Для использования версии Release (в итоговой (release) версии приложения) никаких дополнительных манипуляций не надо: всё необходимое уже включено в специальный zip-архив, вам нужно только распаковать его в директорию с приложением, с заменой файлов, если туда скопировались debug-версии библиотеки.

В некоторых шаблонах (templates) элементов управления используются вложенные свойства зависимостей (attached dependency property) для управления metro-specified (и не только) свойствами этих элементов. Звучит страшновато, но на практике это означает что вы, например, можете изменять цвет и размер галочки в CheckBox'е.

В теме используется ограниченное кол-во цветов для стилей элементов управления: Accent, Transparent, Semitransparent, Background, Foreground, Contrast, Highlight, MiddleLight, Lowlight и Disabled. Несмотря на то, что вы можете устанавливать для них любые значения через ThemeManager, настоятельно рекомендуется использовать только стандартные цвета: DarkColor для тёмной темы, LightColors для светлой и AccentColors для акцентирующего цвета.

Создание своей темы на основе Elysium Theme

Поскольку Elysium Theme распространяется под лицензией MIT, вы можете просматривать и редактировать её исходный код. Указанный сценарий подразумевает, что вы берёте из Elysium Theme xaml-файлы стилей элеметов управления и используете их в своём приложении, заменяя использование статических полей, подключаемых и обычных свойств зависимотей на их значения по-умолчанию.
Известные проблемы и их решения

На данный момент мне известно только две более-менее критические проблемы в проекте (причём для обоих имеются временные решения):
Невозможность открытия ContextMenu при использовании ApplicationBar. На самом деле неизвестно, баг это или фича. Дело в том, что по логике ApplicationBar она должна открываться при щелчке правой кнопкой мыши на любом элементе, однако поскольку WPF приложения — это настольные приложения, а не приложения для телефона или специально под touchscreen, то она не должна «перекрывать» поведение ContextMenu. На деле же, сейчас ApplicationBar ведёт себя несколько странно (её можно использовать только в пределах текущего окна и оно не позволяет открываться ContextMenu). В связи с этим, у ApplicationBar имеется вложенное свойство зависимостей PreventOpen, установка которого в true запрещает ApplicationBar показываться при щелчке на указанном элементе управления и его дочерних элементах. Увидеть его в действии можно в приложении-примере на странице загрузки на Codeplex (см. ниже).

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

Чем я могу помочь?

На данный момент проекту в первую очередь не хватает документации, в связи с чем нужны люди, умеющиее хорошо писать техническую документацию (описание классов и их членов) и документацию по использованию (описание того, как, зачем и почему работают отдельные части Elysium Theme и проект в целом). Естественно, писатели документации должны очень хорошо знать английский язык, иначе я бы уже давно написал её сам. =)
Также проекту требуется множество тестеров (для выявления багов и написания нескольких сложных тестов для проверки некоторого функционала) и, естественно, проекту необходимы рецензии.
А где же сам проект?

Проект хостится на Codeplex. Вот главная страница проекта, а вот страница загрузки последней версии. Также у проекта есть своя страничка в Visual Studio Gallery, т.е. он доступен во встроенном в Visual Studio менеджере расширений (extensions).Спасибо за внимание!


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js