Как я могу создать стиль границы и строки заголовка окна в WPF?

мы разрабатываем приложение WPF, которое использует набор элементов управления Telerik, и все работает и выглядит нормально. К сожалению, недавно нам пришлось заменить базовый класс всех наших диалогов, изменив RadWindow на стандартное окно WPF (причина не имеет значения для этого обсуждения). При этом у нас появилось приложение, которое все еще выглядело довольно на всех компьютерах разработчика (Windows 7 с включенным Aero), но было уродливым при использовании в среде нашего клиента (службы терминалов под Windows Server 2008 R2).

RadWindow Telerik-это стандартный пользовательский элемент управления, который имитирует поведение диалога, поэтому стиль не был проблемой. Однако с окном WPF мне трудно изменить его "границу". То, что я имею в виду под "границей", - это как строка заголовка со значком, так и 3 стандартные кнопки (свернуть, развернуть/восстановить, закрыть) и ручка изменения размера вокруг окна.

Как я могу изменить внешний вид этих элементов:

  • заголовок цвет
  • 3 стандартные кнопки
  • реальный цвет границы окна

с круглыми углами, если это возможно.

6 ответов


Это" неклиентские " области и управляются Windows. вот документы MSDN по этому вопросу (соответствующая информация находится вверху).

в основном, вы устанавливаете WindowStyle вашего окна= "None", а затем создаете свой собственный интерфейс окна. (похожий вопрос на SO)


необходимо указать

WindowStyle="None", AllowsTransparency="True" и дополнительно ResizeMode="NoResize"
а затем выберите Style свойство окна для вашего пользовательского стиля окна, где вы создаете внешний вид окна (строка заголовка, кнопки, граница) на все, что вы хотите, и отображать содержимое окна в ContentPresenter.

этой кажется, хорошая статья о том, как вы можете добиться этого, но есть много других статей в интернете.


Я нашел более прямое решение из комментария @DK в этот вопрос, решение написано Алексом и описано здесь С Источник, Чтобы сделать настроенное окно:

  1. скачать образец проекта здесь
  2. изменить общий.XAML-файл для настройки макета.
  3. наслаждайтесь :).

проверьте следующие образец WPF настройка внешнего вида окна в XAML

в этом примере показано, как полностью настроить стиль / внешний вид окна, включая области, не являющиеся клиентами: панель заголовка, границы, кнопки max, min и close, обеспечивая при этом всю ожидаемую функциональность.


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

Я ищу то же самое, и я падаю на этой решение с открытым исходным кодом, я надеюсь, что это поможет.


Если кто-то говорит вам, что вы не можете, потому что это будет неклиентская область, и только Windows может контролировать это, они ошибаются!

это только полуправда, потому что Windows позволяет указывать размеры для неклиентской области. Дело в том, что это возможно во всех методах ядра Windows, и вы находитесь в .NET, а не в C++. В любом случае, не волнуйся! P / Invoke существует только для такой вещи! Таким образом, вы можете вызвать методы ядра для настройки неклиентской области.

однако это действительно сложное решение, которое я придумал много раз назад. К счастью, начиная с .NET 4.5, вы можете использовать WindowChrome класс для настройки области, не являющейся клиентом, как вы хотите. здесь вы можете попасть в MSDN.

чтобы сделать вещи проще и чище, я перенаправлю вас здесь, руководство по изменению размера границы окна на то, что вы хотите. Установив его в 0, вы сможете реализовать свою пользовательскую границу окна вместо системы один.

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