web-dev-qa-db-fra.com

Comment centrer une application WPF à l'écran?

Je souhaite centrer mon application WPF au démarrage sur l'écran principal. Je sais que je dois définir myWindow.Left et myWindow.Top, mais où puis-je obtenir les valeurs?

J'ai trouvé System.Windows.Forms.Screen.PrimaryScreen, qui n'est apparemment pas WPF. Existe-t-il une alternative WPF qui me donne la résolution de l'écran ou quelque chose du genre?

103
Marcel B

Mettez ceci dans votre constructeur de fenêtre

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

.NET Framework pris en charge dans: 4, 3.5, 3.0

Profil de client .NET Framework pris en charge dans: 4, 3.5 SP1

121
Indy9000

xaml

WindowStartupLocation="CenterScreen"
138
Pratik Deoghare

Vous pouvez toujours utiliser la classe Screen à partir d'une application WPF. Il vous suffit de référencer l'assembly System.Windows.Forms à partir de votre application. Une fois que vous avez fait cela (et référencé System.Drawing pour l'exemple ci-dessous):

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

... fonctionne très bien.

Avez-vous envisagé de définir votre propriété de fenêtre principale WindowStartupLocation sur CenterScreen?

49
Michael Petrotta

Qu'en est-il de la classe SystemParameters dans PresentationFramework? Il a une propriété WorkArea qui semble être ce que vous recherchez.

Mais pourquoi ne pas définir Window.WindowStartupLocation? CenterScreen est l'une des valeurs enum. Devez-vous modifier le centrage?

8
Eddie Butt

Vous n'avez pas besoin de référencer le System.Windows.Forms Assembly de votre application. Au lieu de cela, vous pouvez utiliser System.Windows.SystemParameters.WorkArea. Ceci est équivalent à la System.Windows.Forms.Screen.PrimaryScreen.WorkingArea!

7
Mimi
var window = new MyWindow();

pour le centre de l'écran utiliser:

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

pour le centre de la fenêtre parente utiliser:

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

Il n'y a pas d'équivalent WPF. System.Windows.Forms.Screen fait toujours partie du framework .NET et peut cependant être utilisé à partir de WPF.

Voir cette question pour plus de détails, mais vous pouvez utiliser les appels relatifs aux écrans en utilisant la classe WindowInteropHelper pour envelopper votre contrôle WPF.

2
Jeff Yates