2009-06-01 6 views
81

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?Comment centrer une application WPF à l'écran?

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 d'écran ou quelque chose comme ça?

Répondre

90

Mettez dans votre constructeur de fenêtre

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; 

FrameworkSupported .NET dans: 4, 3.5, 3.0

.NET Framework client ProfileSupported dans: 4, 3.5 SP1

+2

A travaillé pour moi (.NET 4) et j'aime aussi WindowStartupLocation.CenterOwner pour certaines fenêtres enfants – Stonetip

+0

La valeur par défaut est Manual. Réf: https://msdn.microsoft.com/en-us/library/system.windows.window.windowstartuplocation%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 – CJBS

48

Vous pouvez toujours utiliser la classe Screen à partir d'une application WPF. Vous avez juste besoin de référencer l'assembly System.Windows.Forms 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?

+1

oh ... Je ne savais pas que l'un. Merci. –

+1

Je cherchais WindowStartupLocation; Je savais que j'avais déjà vu ça, très utile! – chocojosh

+0

@Michael Petrotta Merci. Je devrais regarder les propriétés plus souvent. – meffordm

2

Il n'y a pas d'équivalent WPF. System.Windows.Forms.Screen fait toujours partie du framework .NET et peut être utilisé depuis WPF. Pour plus de détails, voir this question pour plus d'informations, mais vous pouvez utiliser les appels relatifs aux écrans en utilisant la classe WindowInteropHelper pour envelopper votre contrôle WPF.

8

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

Mais pourquoi ne pas configurer le Window.WindowStartupLocation? CenterScreen est l'une des valeurs enum. Avez-vous besoin d'ajuster le centrage?

+0

Grande trouvaille :) Le problème avec l'écran central pour moi est au moins, ma fenêtre de connexion est petite et si l'utilisateur est clickign autour pendant que l'application est ouverte, il passe souvent inaperçu et passe en arrière-plan. Mais si je peux l'ouvrir sur l'affichage principal au centre cela fonctionne bien.note: la plupart des utilisateurs ont 4+ écrans –

+0

4+ écrans, comptez moi! – user7116

109

xaml

WindowStartupLocation="CenterScreen" 
+6

Je préfère utiliser WPF xaml. Merci! ;-) – James

7

Vous n'avez pas besoin de faire référence à 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!

1
var window = new MyWindow(); 

pour le centre de l'utilisation de l'écran:

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

pour le centre de l'utilisation de la fenêtre parent:

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