Как сделать окно на весь экран wpf

Обновлено: 04.05.2024

У меня есть приложение WPF, и мне нужно знать, как программно центрировать окно wain (не в XAML).

Мне нужно иметь возможность делать это как при запуске, так и в ответ на определенные события пользователя. Он должен быть динамически рассчитан, так как сам размер окна является динамическим.

какой самый простой способ сделать это? В старом коде Win32 я бы вызвал функции системных метрик и все это разработал. Это все еще так, как это делается, или есть простой CenterWindowOnScreen() функция, которую я теперь могу вызвать.

этот метод можно использовать для установки положения окна в центре экрана.

Ну, для времени запуска вы можете установить автозагрузки:

позже вам нужно будет запросить его. Информация (по крайней мере для основного экрана) доступна через SystemParameters.PrimaryScreenWidth/Высота.

разве не так же просто установить

в определении XAML для окна.

это учитывает размер панели задач (с помощью System.Windows.SystemParameters.WorkArea ) и положение (путем добавления workArea.Left и workArea.Top )

  • Петровская чтобы найти текущий монитор-а не только основной монитор (серьезно, кто имеет только 1 монитор на работе больше?)
  • @Wild_A это!--11--> использовать workarea , а не screen bounds чтобы учесть пространство для панели задач.
  • мне пришлось добавить масштабирование DPI, специально для планшета, отображающего 1280x800 как 1024x640, но который полезен для покрытия краевых случаев, для которых я нашел ответ для здесь. Примечание dpiScaling переменная имеет значение null, если вызывается при первой загрузке перед отображением пользовательского интерфейса (пояснил, что)

здесь myWindowWidth и myWindowHeight являются переменными, которые я использовал для ручной установки размера окна ранее.

в элементе window просто добавьте эту пару атрибут-значение: WindowStartupLocation="CenterScreen"

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

в конструкторе окна теперь просто вызываем метод:

в качестве базового решения можно использовать свойство StartupLocation окна, присвоив ему одно из значений перечисления, определенных в System.Окна.Перечисление WindowStartupLocation, есть один для центра экрана:

к сожалению, это не всегда так просто; вам нужно учитывать несколько мониторов,панелей задач и т. д. Опция "CenterScreen" открывает окно в центре экрана с курсором мыши. См.это так вопрос для многих информация или ссылка на api.

Если вы его развернуть сразу
этот.Windowstate Значение = Система.Окна.Windowstate значение.Максимизировано;

на основе ответа @Wild_A я только что подписался на SizeChanged событие и добавлен этот обработчик событий:

I would like to make my application such that it can maximize to full screen means it hide the windows task bar and the title bar as well. And it should triggered by a button.

enter image description here

I am trying to develop the my application window like this.

Add my code snippet below

10 Answers 10

You need to set the WindowStyle to none as well as WindowState to Maximized

You need to set the ResizeMode to NoResize and WindowState to Maximized

This also was solution for WPF on windows 10. Without that it works fine on win 7 but not on win 8 and win 10. I am using WindowState="Maximized" WindowStyle="None" ResizeMode="NoResize"

I already had WindowStyle=None and WindowState=Maximized (in this order!) which worked in Windows 7 and Windows 8.1 without a problem. But as soon as my application opened a dialog window, the taskbar appeared topmost on Windows 10 - and it didn't went away, except when switching to a different window and back to my application. ResizeMode=NoResize solved this!

If the taskbar doesn't disappear, it may help to change the Window visibility before and after changing window style, like this:

Is ShowTitleBar a real property? It's giving me an error, and apparently the correct way of hiding the title bar is WindowStyle="None"

You just need to set the WindowStyle to none:

Step 1: Write class with static methods Hide() and Show() for taskbar

Step 2: Connect to window Closing event to get taskbar back when window will close with Alt+F4

Hide taskbar and show fullscreen:

Show taskbar and run in window

Tested on Windows 10 1703 (Creators Update)

enter image description here

I had this issue with the taskbar staying on top of my window. The current solution i use is setting the window as Topmost for a short time, then setting it back to false (i want my window to work nice with Alt+Tab)

I also use this code to switch between full screen and window mode:

None of the above worked for me. Even with the Windows API the taskbar does hide but there is still the space after the window is maximized. What worked is to not set the Maximized property, get the size of the desktop and set these:

Don't even need to set the Topmost! To get the screen size you can either use the value from SystemParameters.PrimaryScreenHeight and PrimaryScreenWidth, or if you want to get the screen where the window is currently on, use GetMonitorFromWindow from below:

Simply hook this event handler to the Loaded event of the form, works fine.
Do not apply this stuff in the constructor of the form (which won't work for me).

у меня есть окно с моим пользовательским элементом управления, и я хотел бы сделать ширину usercontrol равной ширине окна. Как это сделать?

пользовательский элемент управления представляет собой горизонтальное меню и содержит сетку с тремя столбцами:

вот почему я хочу ширину окна, чтобы растянуть пользовательский элемент управления до 100% ширины, со вторым столбцом относительно.

Я использую сетку, есть код для окна:

вам нужно убедиться, что ваш usercontrol не установил его ширину в xaml-файле usercontrol. Просто удалите Width=". "от него и вы хорошо идти!

EDIT: это код, с которым я его тестировал:

файл window1.язык XAML:

холст в WPF не обеспечивает большую автоматическую поддержку макета. По этой причине я стараюсь держаться от них подальше (HorizontalAlignment и VerticalAlignment работают не так, как ожидалось), но я получил ваш код для работы с этими незначительными изменениями (привязка ширины и высоты элемента управления К ActualWidth/ActualHeight холста).

проблема здесь в холсте. Если вы на самом деле не используете функции, предлагаемые canvas с точки зрения макета или Z-порядка "squashing" (подумайте о команде flatten в PhotoShop), я бы рассмотрел использование элемента управления как сетки, чтобы вам не пришлось изучать причуды элемента управления, который работает иначе, чем вы ожидали с WPF.

имеет ли холст решающее значение в вашем окне? Если нет, попробуйте удалить его и сохранить сетку в качестве главной панели. Холст не имеет размера, если не указано, в то время как сетка обычно занимает все доступное пространство. Внутри холста сетка не будет иметь свободного места.

позволяет ли установка HorizontalAlignment растягиваться, а Width-автоматически на пользовательском элементе управления достичь желаемых результатов?

в какой контейнер вы добавляете UserControl? Обычно, когда вы добавляете элементы управления в сетку, они растягиваются, чтобы заполнить доступное пространство (если их строка/столбец не ограничены определенной шириной).

вместо использования ширины и высоты в пользовательских элементах управления используйте MinHeight и MinWidth. Затем вы можете настроить UC хорошо, и сможете растянуться внутри другого окна.

Ну, как я вижу в WPF Microsoft сделал переосмысление свойств и поведения windows, но до сих пор я ничего не пропустил из старых Windows forms, в WPF элементы управления есть, но с новой точки зрения.

это сработало для меня. не назначайте ширину или высоту UserControl и определите определение строки и столбца в Родительском окне.

Ключевым элементом в системе графического интерфейса в WPF является окно, которое содержит все необходимые элементы управления. Окно в WPF представлено классом Window , который является производным от класса ContentControl. Поэтому окно является элементом управления содержимым, и как, к примеру, кнопка, может содержать в себе один дочерний элемент. Как правило, в его качестве выступает один из элементов компоновки, например, Grid.

Класс Window привносит ряд свойств, которые позволяют настроить окно приложения:

AllowsTransparency : при значении true позволяет установить прозрачный фон окна

Icon : представляет иконку, которая отображается в левом верхнем углу окна и в панели задач. Если иконка не установлена, то система будет использовать стандартную иконку по умолчанию.

Top : устанавливает отступ окна приложения от верхней границы экрана

Left : устанавливает отступ окна приложения от левой границы экрана

ResizeMode : задает режим изменения размеров окна. Может принимать следующие значения:

CanMinimize : окно можно только свернуть

NoResize : у окна нельзя изменить начальные размеры

CanResize : у окна можно изменять размеры

CanResizeWithGrip : в правом нижнем углу окна появляется визуализация того, что у окна можно изменять размеры

RestoreBounds : возвращает границы окна

ShowInTaskbar : при значении true иконка окна отображается на панели задач

SizeToContent : позволяет автоматически масштабировать размеры окна в зависимости от содержимого. Может принимать следующие значения:

Width : автоматически масштабируется только ширина

Height : автоматически масштабируется только высота

WidthAndHeight : автоматически масштабируются высота и ширина

Manual : автоматическое масштабирование отсутствует

Title : заголовок окна

Topmost : при значении true окно устанавливается поверх других окон приложения

WindowStartupLocation : устанавливает стартовую позицию окна. Может принимать следующие значения:

CenterOwner : если данное окно было запущено другим окном, то данное окно позиционируется относительно центра запустившего его окна

CenterScreen : окно помещается в центре экрана

Manual : позиция устанавливается вручную с помощью свойств Top и Left

WindowState : состояние окна. Возможные значения:

Maximized : раскрыто на весь экран

Normal : стандартное состояние

Жизненный цикл

В процессе работы окно в WPF проходит ряд этапов жизненного цикла, которые доступны нам через обработку событий класса Window:

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

Loaded : возникает после полной инициализации окна и применения к нему стилей и привязки данных. После генерации этого события происходит визуализация элемента, и окно отображается на экране и становится видимым для пользователя

Closing : возникает при закрытии окна

Closed : возникает, когда окно становится закрытым

Unloaded : возникает после закрытия окна при выгрузке всех связанных ресурсов из памяти

Соответственно, если нам надо выполнить некоторые действия при загрузке или при закрытии окна, мы можем обработать события Loaded и Closing/Closed. Например, запишем в текстовый лог события жизненного цикла:

Элементы WPF обладают набором свойств, которые помогают позиционировать данные элементы. Рассмотрим некоторые из этих свойств.

Ширина и высота

У элемента можно установить ширину с помощью свойства Width и высоту с помощью свойства Height . Эти свойства принимают значение типа double . Хотя общая рекомендация состоит в том, что желательно избегать жестко закодированных в коде ширины и высоты.

Также мы можем задать возможный диапазон ширины и высоты с помощью свойств MinWidth/MaxWidth и MinHeight/MaxHeight . И при растяжении или сжатии контейнеров элементы с данными заданными свойствами не будут выходить за пределы установленных значений.

Возможно, возникает вопрос, а в каких единицах измерения устанавливаются ширина и высота? Да и в общем какие единицы измерения используются? В WPF можно использовать несколько единиц измерения: сантиметры ( cm ), точки ( pt ), дюймы ( in ) и пиксели ( px ). Например, зададим размеры в других единицах:

Если единица измерения не задана явно, а просто стоит число, то используются по умолчанию пиксели. Но эти пиксели не равны обычным пикселям, а являются своего рода "логическими пикселями", независимыми от конкретного устройства. Каждый такой пиксель представляет 1/96 дюйма вне зависимости от разрешения экрана.

Выравнивание

HorizontalAlignment

С помощью специальных свойств мы можем выровнять элемент относительно определенной стороны контейнера по горизонтали или вертикали.

Свойство HorizontalAlignment выравнивает элемент по горизонтали относительно правой или левой стороны контейнера и соответственно может принимать значения Left, Right, Center (положение по центру), Stretch (растяжение по всей ширине). Например:

Свойство HorizontalAlignment в WPF

VerticalAlignment

Также мы можем задать для элемента выравнивание по вертикали с помощью свойства VerticalAlignment , которое принимает следующие значения: Top (положение в верху контейнера), Bottom (положение внизу), Center (положение по центру), Stretch (растяжение по всей высоте). Например:

Свойство VerticalAlignment в WPF

Отступы margin

Свойство Margin устанавливает отступы вокруг элемента. Синтаксис: Margin="левый_отступ верхний_отступ правый_отступ нижний_отступ". Например, установим отступы у одной кнопки слева и сверху, а у другой кнопки справа и снизу:

Свойство Margin в WPF

Если мы зададим свойство таким образом: Margin="20", то сразу установим отступ для всех четырех сторон.

Panel.ZIndex

При создании интерфейса возможна ситуация, когда одни элементы будут полностью или частично перекрывать другие. По умолчанию те элементы, которые определены позже, перекрывают те элементы, которые определены ранее. Однако мы можем изменить подобное действие с помощью свойства Panel.ZIndex.

По умолчанию для всех создаваемых элементов Panel.ZIndex="0" . Однако назначив данному свойству более высокое значение, мы можем передвинуть его на передний план. Элементы с большим значением этого свойства будут перекрывать те элементы, у которых меньшее значение этого свойства:

Читайте также: