Поделиться через


Элемент управления "Мастер стиля Aero Windows" в C#

Автор: Джон Прис (Jon Preece)

В этой статье мы рассмотрим создание нашей собственной формы с темой Windows Aero.

Я являюсь почитателем окон в стиле Windows Aero с того времени, как Aero появился в Windows Vista. Однако в платформу .NET framework не включен стиль Aero, поэтому я приступил к созданию собственной формы с темой Windows Aero.

Введение

В том проекте используется работа, сделанная другими (как и моя собственная прилежная работа); pimb2 и Windows Forms Aero в CodePlex.

Это пример мастера Windows Aero, который обычно можно найти в Windows Vista.

Поскольку (насколько мне известно) в платформе .NET framework отсутствуют встроенные ресурсы для простого создания форм в стиле Windows Aero, целью этого проекта являлось обеспечение доступа к классам, с помощью которых пользователь может легко создавать формы с темами.

Интересующие визуальные аспекты:

  • прозрачность (вверху окна);
  • кнопка навигации (кнопка "Назад");
  • значок;
  • светящийся текст (заголовок).

Этот элемент управления предоставляет простой доступ к этим (и дополнительным) функциям для упрощения процесса настройки.  Что (пока) не характерно для этого элемента управления, так это простой способ переключения между страницами.  Для этого придется использовать что-нибудь вроде панелей.  (Для помощи включено несколько событий).

За кулисами

Чтобы это волшебство произошло, необходимо использовать API диспетчера окон рабочего стола (dwmapi.dll) и стили форматирования (UxTheme.dll), встроенные в Windows Vista и последующие версии Windows.  При этом имеется два метода, которые необходимо вызывать, чтобы распространить тему "прозрачности" на наше окно.

DwmExtendFrameIntoClientArea распространяет прозрачный вид на форму в зависимости от заданных границ (MARGINS).

var Margins = new MARGINS { Top = 41, Left = 0, Right = 0, Bottom = 0 };

DwmExtendFrameIntoClientArea(Handle, ref Margins);

Чтобы увеличить высоту прозрачной области, просто настройте свойства границ в соответствии с основным содержимым.

Кроме того, имеется внешний метод SetWindowThemeAttribute (UxTheme.dll), который также появился в Windows Vista, для определения стилей форматирования окна.

Остается просто уравновесить различные сценарии в разных ОС (потребуется немного работы, когда отключена композиция окон рабочего стола, и когда программа выполняется в более старой ОС, чем Windows Vista).

Настройка проекта

Элемент управления "Мастер стиля Aero Windows" (который в действительности называется "JPWizardForm") включен как часть инфраструктуры JPC, которую я разработал. Однако на время написания инфраструктуры JPC он еще не был полностью готов для загрузки, поэтому я сделал специальный проект, ссылка на который имеется вверху этой страницы.

  • Загрузите и откройте присоединенный проект.
  • Перейдите в представление источника для файла MainForm.cs.
  • Измените класс, чтобы он наследовал JPWizardFormвместо стандартного класса Form.
namespace WindowsAeroWizardControl

{

     public partial class MainForm : JPWizardForm

     {

          public MainForm()

          {

               InitializeComponent();

          }

     }

}

Постройте проект и вернитесь в представление конструирования.

Использование элемента управления

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

EnablePreviousButton : Boolean

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

IsAeroEnabled : Boolean

Извлекает значение, указывающее, включены ли на компьютере темы стиля Aero Windows в текущий момент.  Обратите внимание, что это значение всегда будет false при использовании в Visual Studio (во время разработки).  Чтобы значение изменилось, необходимо построить и выполнить программу.

WizardIcon:Image

Извлекает или устанавливает значок для использования с левой верхней стороны формы.

DesktopCompositionChanged :Event

Это событие порождается, когда диспетчер окон рабочего стола уведомляет элемент управления об изменении тем Windows.  Вероятно, эти темы либо включаются, либо выключаются.  При порождении этого события следует проверить свойство IsAeroEnabled.

Next : Event

Порождается при нажатии кнопки "Далее".

Previous : Event

Порождается при нажатии кнопки "Назад" (кнопки навигации).

CloseRequest : Event

Порождается, когда пользователь нажимает кнопку "Отмена".

Дальнейшая разработка

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