Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

  • загрузите образец проекта здесь
  • отредактируйте файл generic.xaml, чтобы настроить макет.
  • наслаждайтесь:).

Ответ 4

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

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

Ответ 5

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

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

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

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

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

Ответ 6

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

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