Jak wyśrodkować aplikację WPF na ekranie?

110

Chcę wyśrodkować moją aplikację WPF podczas uruchamiania na ekranie głównym. Wiem, że muszę ustawić myWindow.Left i myWindow.Top, ale skąd mam wziąć te wartości?

Znalazłem System.Windows.Forms.Screen.PrimaryScreen, co najwyraźniej nie jest WPF. Czy istnieje alternatywa WPF, która daje mi rozdzielczość ekranu lub coś takiego?

Marcel B.
źródło

Odpowiedzi:

143

Umieść to w swoim konstruktorze okien

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

.NET Framework Obsługiwane w: 4, 3.5, 3.0

.NET Framework Client Profile Obsługiwane w: 4, 3.5 SP1

Indy9000
źródło
2
Pracował dla mnie (.NET 4) i lubię też WindowStartupLocation.CenterOwnerniektóre okna podrzędne
Stonetip
Wartość domyślna to Manual. Ref: msdn.microsoft.com/en-us/library/…
CJBS,
158

xaml

WindowStartupLocation="CenterScreen"
Pratik Deoghare
źródło
12
Wolę używać WPF xaml. Dzięki! ;-)
James
1
Tak proste jak to!
Jim,
1
Dodano do tagu <Window> i działa idealnie :)
Junaid Khan
49

Nadal możesz używać klasy Screen z aplikacji WPF. Wystarczy odwołać się do zestawu System.Windows.Forms z poziomu aplikacji. Gdy już to zrobisz (i odwołaj się do System.Drawing dla przykładu poniżej):

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

... działa dobrze.

Czy rozważałeś ustawienie właściwości okna głównego WindowStartupLocation na CenterScreen?

Michael Petrotta
źródło
1
och ... tego nie znałam. Dzięki.
Marcel B
1
Szukałem WindowStartupLocation; wiedziałem, że już to widziałem, bardzo przydatne!
chocojosh,
@Michael Petrotta Thanks. Powinienem częściej przyglądać się właściwościom.
meffordm
8

A co z klasą SystemParameters w PresentationFramework? Ma właściwość WorkArea, która wydaje się być tym, czego szukasz.

Ale dlaczego ustawienie Window.WindowStartupLocation nie działa? CenterScreen jest jedną z wartości wyliczenia. Czy musisz poprawić wyśrodkowanie?

Eddie Butt
źródło
Świetne znalezisko :) Problem ze środkowym ekranem przynajmniej dla mnie polega na tym, że moje okno logowania jest małe i jeśli użytkownik kliknie podczas otwierania aplikacji, często pozostaje niezauważony i przechodzi w tło. Ale jeśli mogę go otworzyć na głównym wyświetlaczu pośrodku, działa dobrze. uwaga: większość użytkowników ma 4+ ekrany
Michał Ciechan
4+ ekrany, policz mnie!
user7116
7

Nie musisz odwoływać się do System.Windows.Formszestawu z aplikacji. Zamiast tego możesz użyć System.Windows.SystemParameters.WorkArea. Jest to odpowiednik System.Windows.Forms.Screen.PrimaryScreen.WorkingArea!

Mimi
źródło
2

Nie ma odpowiednika WPF. System.Windows.Forms.Screenjest nadal częścią platformy .NET i może być używany z WPF.

Zobacz to pytanie, aby uzyskać więcej informacji, ale możesz użyć wywołań związanych z ekranami, używając WindowInteropHelperklasy do zawijania formantu WPF.

Jeff Yates
źródło
2
var window = new MyWindow();

na środku ekranu użyj:

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

dla środka okna nadrzędnego użyj:

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
Artem
źródło
0

Wolę umieścić to w kodzie WPF.

W [WindowName].xamlpliku:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
Jason Robinson
źródło