Как я могу оформить границы и заголовок окна в WPF? - PullRequest
31 голосов
/ 02 апреля 2012

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

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

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

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

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

Ответы [ 6 ]

26 голосов
/ 02 апреля 2012

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

По сути, вы устанавливаете WindowStyle = "Нет" в Window, а затем создаете свой собственный оконный интерфейс.( аналогичный вопрос по SO )

13 голосов
/ 02 апреля 2012

Вам нужно установить

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

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

6 голосов
/ 10 апреля 2014

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

  1. скачайте пример проекта здесь
  2. отредактируйте файл generic.xaml для настройки макета.
  3. enjoy:).
4 голосов
/ 13 сентября 2017

Проверьте следующий пример WPF, настраивающий внешний вид окна в XAML

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

2 голосов
/ 26 сентября 2018

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

Это всего лишь полуправда, потому что Windows позволяет вам указывать размеры не клиентской области.Дело в том, что это возможно только для методов ядра Windows, и вы находитесь в .NET, а не в C / C ++.Во всяком случае, не волнуйтесь!P / Invoke предназначался именно для таких вещей!Действительно, все методы Std-I / O интерфейса пользователя Windows Form и консольного приложения предлагаются с использованием системных вызовов.Следовательно, вам нужно будет только выполнить правильные системные вызовы, чтобы настроить не клиентскую область, как описано в MSDN.

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

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

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

1 голос
/ 30 июня 2015

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

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

...