Как центрировать приложение WPF на экране? - PullRequest
102 голосов
/ 01 июня 2009

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

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

Ответы [ 7 ]

137 голосов
/ 24 мая 2011

XAML

WindowStartupLocation="CenterScreen"
119 голосов
/ 18 февраля 2011

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

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

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

.NET Framework Client ProfileSupported в: 4, 3,5 SP1

49 голосов
/ 01 июня 2009

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

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

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

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

8 голосов
/ 04 июня 2009

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

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

7 голосов
/ 05 сентября 2011

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

2 голосов
/ 28 апреля 2017
var window = new MyWindow();

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

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

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

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
2 голосов
/ 01 июня 2009

Нет эквивалента WPF. System.Windows.Forms.Screen все еще является частью .NET Framework и может использоваться из WPF.

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

...