Come centrare un'app WPF sullo schermo?


110

Voglio centrare la mia app WPF all'avvio nella schermata principale. So di dover impostare myWindow.Left e myWindow.Top, ma dove ottengo i valori?

Ho trovato System.Windows.Forms.Screen.PrimaryScreen, che a quanto pare non è WPF. Esiste un'alternativa WPF che mi dà la risoluzione dello schermo o qualcosa del genere?

Risposte:


143

Mettilo nel tuo costruttore di finestre

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

.NET Framework Supportato in: 4, 3.5, 3.0

Profilo client .NET Framework Supportato in: 4, 3.5 SP1


2
Ha funzionato per me (.NET 4) e mi piace anche WindowStartupLocation.CenterOwnerper alcune finestre figlio
Stonetip

L'impostazione predefinita è Manual. Ref: msdn.microsoft.com/en-us/library/...
CJBS


49

Puoi comunque usare la classe Screen da un'app WPF. È sufficiente fare riferimento all'assembly System.Windows.Forms dall'applicazione. Dopo averlo fatto, (e fatto riferimento a System.Drawing per l'esempio seguente):

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

... funziona benissimo.

Hai considerato di impostare la proprietà della finestra principale WindowStartupLocation su CenterScreen?


1
oh ... non lo sapevo. Grazie.
Marcel B

1
Stavo cercando WindowStartupLocation; sapevo di averlo visto prima, molto utile!
chocojosh

@Michael Petrotta Grazie. Dovrei guardare le proprietà più spesso.
meffordm

8

E la classe SystemParameters in PresentationFramework? Ha una proprietà WorkArea che sembra essere quello che stai cercando.

Ma perché l'impostazione di Window.WindowStartupLocation non funziona? CenterScreen è uno dei valori enum. Devi modificare la centratura?


Ottima scoperta :) Il problema con lo schermo centrale almeno per me è che la mia finestra di accesso è piccola e se l'utente fa clic mentre si apre l'app, spesso passa inosservata e passa in background. Ma se riesco ad aprirlo sul display principale al centro funziona bene. nota: la maggior parte degli utenti ha 4+ schermi
Michal Ciechan

4+ schermate, contami!
user7116

7

Non è necessario fare riferimento System.Windows.Formsall'assembly dall'applicazione. Invece, puoi usare System.Windows.SystemParameters.WorkArea. Questo è equivalente al System.Windows.Forms.Screen.PrimaryScreen.WorkingArea!


2

Non esiste un equivalente WPF. System.Windows.Forms.Screenfa ancora parte del framework .NET e può essere utilizzato da WPF.

Vedi questa domanda per maggiori dettagli, ma puoi usare le chiamate relative alle schermate usando la WindowInteropHelperclasse per racchiudere il tuo controllo WPF.


2
var window = new MyWindow();

per il centro dello schermo utilizzare:

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

per il centro della finestra genitore usa:

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;

0

Preferisco metterlo nel codice WPF.

Nel [WindowName].xamlfile:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.