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?

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


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"

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?


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?


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!


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.


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;

0

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

Dans le [WindowName].xamldossier:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.