Как я могу создать границу и строку заголовка окна в WPF?
Мы разрабатываем приложение WPF, которое использует набор элементов управления Telerik, и все работает и выглядит отлично. К сожалению, недавно нам нужно было заменить базовый класс всех наших диалогов, изменив RadWindow стандартным окном WPF (причина не имеет отношения к этому обсуждению). При этом у нас появилось приложение, которое по-прежнему выглядело довольно на всех компьютерах-разработчиках (Windows 7 с включенным Aero), но была уродливой при использовании в нашей клиентской среде (Terminal Services в Windows Server 2008 R2).
Telerik RadWindow - это стандартный пользовательский элемент управления, который имитирует поведение диалогового окна, поэтому его стиль не был проблемой. С WPF Window, однако, я с трудом меняю свою "границу". Под "границей" здесь подразумевается как строка заголовка со значком, так и 3 стандартные кнопки ( "Свернуть", "Максимизировать/Восстановить", "Закрыть" ) и "Изменить размер" вокруг окна.
Как изменить внешний вид этих элементов:
- Цвет заголовка
- 3 стандартных кнопки
- Цвет окна реального цвета
С круглыми углами, если это возможно.
Ответы
Ответ 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
Я предлагаю вам начать с существующего решения и настроить его под свои нужды, что лучше, чем начинать с нуля!
Я искал то же самое, и я попал на это решение с открытым исходным кодом, надеюсь, оно поможет.