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. Y at-il une alternative WPF qui me donne la résolution de l’écran ou quelque chose comme ça?

Mettez ceci dans votre constructeur de fenêtre

 WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; 

.NET FrameworkSupported in: 4, 3.5, 3.0

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

xaml

 WindowStartupLocation="CenterScreen" 

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

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

… fonctionne bien.

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

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 configurer le Window.WindowStartupLocation? CenterScreen est l’une des valeurs énumérées. Devez-vous modifier le centrage?

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

Il n’y a pas d’équivalent WPF. System.Windows.Forms.Screen fait toujours partie du framework .NET et peut être utilisé depuis 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.

 var window = new MyWindow(); 

pour le centre de l’écran, utilisez:

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

pour le centre de la fenêtre parente, utilisez:

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