Wie zentriere ich eine WPF-App auf dem Bildschirm?

110

Ich möchte meine WPF-App beim Start auf dem primären Bildschirm zentrieren. Ich weiß, dass ich myWindow.Left und myWindow.Top einstellen muss, aber woher bekomme ich die Werte?

Ich fand System.Windows.Forms.Screen.PrimaryScreen, was anscheinend nicht WPF ist. Gibt es eine WPF-Alternative, die mir die Bildschirmauflösung oder ähnliches gibt?

Marcel B.
quelle

Antworten:

142

Fügen Sie dies in Ihren Fensterkonstruktor ein

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

.NET FrameworkUnterstützt in: 4, 3.5, 3.0

.NET Framework-ClientprofilUnterstützt in: 4, 3.5 SP1

Indy9000
quelle
2
Arbeitete für mich (.NET 4) und ich mag auch WindowStartupLocation.CenterOwnerfür einige Kinderfenster
Stonetip
Der Standardwert ist Manual. Ref: msdn.microsoft.com/en-us/library/…
CJBS
158

xaml

WindowStartupLocation="CenterScreen"
Pratik Deoghare
quelle
12
Ich bevorzuge die Verwendung von WPF xaml. Vielen Dank! ;-)
James
1
So einfach ist das!
Jim
1
Zum <Window> -Tag hinzugefügt und funktioniert perfekt :)
Junaid Khan
49

Sie können die Screen-Klasse weiterhin in einer WPF-App verwenden. Sie müssen nur auf die System.Windows.Forms-Assembly in Ihrer Anwendung verweisen. Sobald Sie dies getan haben (und für das folgende Beispiel auf System.Drawing verwiesen haben):

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

... funktioniert gut.

Haben Sie darüber nachgedacht, Ihre Hauptfenstereigenschaft WindowStartupLocation auf CenterScreen zu setzen?

Michael Petrotta
quelle
1
Oh ... das wusste ich nicht. Vielen Dank.
Marcel B
1
Ich habe nach WindowStartupLocation gesucht. Ich wusste, dass ich das schon einmal gesehen hatte, sehr nützlich!
Chocojosh
@ Michael Petrotta Danke. Ich sollte mir die Eigenschaften öfter ansehen.
Meffordm
8

Was ist mit der SystemParameters-Klasse in PresentationFramework? Es hat eine WorkArea Eigenschaft, die genau das zu sein scheint, wonach Sie suchen.

Aber warum funktioniert das Einstellen von Window.WindowStartupLocation nicht? CenterScreen ist einer der Aufzählungswerte. Müssen Sie die Zentrierung anpassen?

Eddie Butt
quelle
Toller Fund :) Das Problem mit dem mittleren Bildschirm ist zumindest für mich, dass mein Anmeldefenster klein ist und wenn der Benutzer beim Öffnen der App herumklickt, wird es oft unbemerkt und tritt in den Hintergrund. Aber wenn ich es auf dem primären Display in der Mitte öffnen kann, funktioniert es gut. Hinweis: Die meisten Benutzer haben 4+ Bildschirme
Michal Ciechan
4+ Bildschirme, zähl mich rein!
user7116
7

Sie müssen nicht auf die System.Windows.FormsBaugruppe aus Ihrer Anwendung verweisen . Stattdessen können Sie verwenden System.Windows.SystemParameters.WorkArea. Dies entspricht dem System.Windows.Forms.Screen.PrimaryScreen.WorkingArea!

Mimi
quelle
2

Es gibt kein WPF-Äquivalent. System.Windows.Forms.Screenist immer noch Teil des .NET Frameworks und kann jedoch von WPF aus verwendet werden.

Sehen Sie diese Frage für weitere Details, aber Sie können die Anrufe verwenden in Bezug auf Bildschirme durch die Verwendung der WindowInteropHelperKlasse Ihres WPF - Steuerelement zu wickeln.

Jeff Yates
quelle
2
var window = new MyWindow();

für die Mitte des Bildschirms verwenden:

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

Verwenden Sie für die Mitte des übergeordneten Fensters:

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
Artem
quelle
0

Ich ziehe es vor, es in den WPF-Code zu setzen.

In [WindowName].xamlDatei:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
Jason Robinson
quelle