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?

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


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"

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?


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?


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!


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.


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;

0

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

In [WindowName].xamlDatei:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.