Как центрировать приложение 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.

Indy9000
источник
2
Работал для меня (.NET 4), и мне также нравятся WindowStartupLocation.CenterOwnerнекоторые дочерние окна
Stonetip
По умолчанию это Manual. Ссылка: msdn.microsoft.com/en-us/library/…
CJBS
158

XAML

WindowStartupLocation="CenterScreen"
Pratik Deoghare
источник
12
Я предпочитаю использовать WPF xaml. Спасибо! ;-)
Джеймс
1
Так просто, как, что!
Джим
1
Добавлен в тег <Window> и отлично работает :)
Джунаид Хан
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;
Артем
источник
0

Я предпочитаю помещать это в код WPF.

В [WindowName].xamlфайле:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
Джейсон Робинсон
источник