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?

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


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,


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?


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?


Ś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!


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.


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;

0

Wolę umieścić to w kodzie WPF.

W [WindowName].xamlpliku:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.