Comment centrer une application WPF à l'écran?

110

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, ce qui n'est apparemment pas WPF. Existe-t-il une alternative WPF qui me donne la résolution d'écran ou quelque chose du genre?

Marcel B
la source

Réponses:

143

Mettez ceci dans votre constructeur de fenêtre

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

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

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

Indy9000
la source
2
A travaillé pour moi (.NET 4) et j'aime aussi WindowStartupLocation.CenterOwnerpour certaines fenêtres enfants
Stonetip
La valeur par défaut est Manual. Réf: msdn.microsoft.com/en-us/library/…
CJBS
158

xaml

WindowStartupLocation="CenterScreen"
Pratik Deoghare
la source
12
Je préfère utiliser WPF xaml. Merci! ;-)
James
1
Aussi simple que cela!
Jim
1
Ajouté à la balise <Window> et fonctionne parfaitement :)
Junaid Khan
49

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?

Michael Petrotta
la source
1
oh ... je ne connaissais pas celui-là. Merci.
Marcel B
1
Je cherchais WindowStartupLocation; savais que j'avais vu ça avant, très utile!
chocojosh
@Michael Petrotta Merci. Je devrais regarder les propriétés plus souvent.
meffordm
8

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

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

Eddie Butt
la source
Bonne trouvaille :) Le problème avec l'écran central pour moi au moins est que ma fenêtre de connexion est petite et si l'utilisateur clique sur le bouton pendant que l'application s'ouvre, elle passe souvent inaperçue et passe en arrière-plan. Mais si je peux l'ouvrir sur l'écran principal au centre, cela fonctionne bien. note: la plupart des utilisateurs ont plus de 4 écrans
Michal Ciechan
4+ écrans, comptez-moi!
user7116
7

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

Mimi
la source
2

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

Consultez cette question pour plus de détails, mais vous pouvez utiliser les appels relatifs aux écrans en utilisant la WindowInteropHelperclasse pour encapsuler votre contrôle WPF.

Jeff Yates
la source
2
var window = new MyWindow();

pour une utilisation au centre de l'écran:

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

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

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
Artem
la source
0

Je préfère le mettre dans le code WPF.

Dans le [WindowName].xamldossier:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
Jason Robinson
la source