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



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



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



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




  • цвет строки заголовка

  • 3 стандарт кнопки

  • реальный цвет границы окна


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

1328   6  

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, вы сможете реализовать свою пользовательскую границу окна вместо границы системы.

Приношу свои извинения за то, что не опубликовал четкую информацию. пример, но позже я обязательно это сделаю.

Comments

    Ничего не найдено.