Как центрировать приложение WPF на экране?


110

Я хочу центрировать свое приложение WPF при запуске на основном экране. Я знаю, что мне нужно установить myWindow.Left и myWindow.Top, но где мне взять значения?

Я нашел System.Windows.Forms.Screen.PrimaryScreen, что, по-видимому, не WPF. Есть ли альтернатива WPF, которая дает мне разрешение экрана или что-то в этом роде?

Ответы:


143

Поместите это в свой конструктор окон

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

.NET Framework Поддерживается в версиях: 4, 3.5, 3.0

Профиль клиента .NET Framework Поддерживается в версиях: 4, 3.5 SP1.


2
Работал для меня (.NET 4), и мне также нравятся WindowStartupLocation.CenterOwnerнекоторые дочерние окна
Stonetip

По умолчанию это Manual. Ссылка: msdn.microsoft.com/en-us/library/…
CJBS


49

Вы по-прежнему можете использовать класс Screen из приложения WPF. Вам просто нужно сослаться на сборку System.Windows.Forms из вашего приложения. Как только вы это сделаете (и сослались на System.Drawing в примере ниже):

Rectangle workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;

... отлично работает.

Рассматривали ли вы возможность установки свойства WindowStartupLocation главного окна на CenterScreen?


1
о ... я не знал этого. Спасибо.
Marcel B

1
Я искал WindowStartupLocation; знал, что видел это раньше, очень полезно!
chocojosh 08

@Michael Petrotta Спасибо. Надо почаще смотреть на свойства.
Meffordm 08

8

А как насчет класса SystemParameters в PresentationFramework? У него есть свойство WorkArea, которое, кажется, именно то, что вы ищете.

Но почему не работает установка Window.WindowStartupLocation? CenterScreen - одно из значений перечисления. Вам нужно подправить центровку?


Отличная находка :) Проблема с центральным экраном для меня, по крайней мере, в том, что мое окно входа в систему маленькое, и если пользователь щелкает мышью, когда приложение открывается, оно часто остается незамеченным и уходит в фоновый режим. Но если я могу открыть его на основном дисплее в центре, он работает нормально. примечание: у большинства пользователей 4+ экрана
Михал Цехан

4+ экрана, посчитайте меня!
user7116

7

Вам не нужно ссылаться на System.Windows.Formsсборку из вашего приложения. Вместо этого вы можете использовать System.Windows.SystemParameters.WorkArea. Это эквивалент System.Windows.Forms.Screen.PrimaryScreen.WorkingArea!


2

Эквивалента WPF не существует. System.Windows.Forms.Screenпо-прежнему является частью платформы .NET и может использоваться из WPF.

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


2
var window = new MyWindow();

для центра экрана используйте:

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

для центра родительского окна используйте:

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.