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?
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
xaml
WindowStartupLocation="CenterScreen"
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?
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?
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
!
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;
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.