¿Cómo centrar una aplicación WPF en la pantalla?

110

Quiero centrar mi aplicación WPF al inicio en la pantalla principal. Sé que tengo que configurar myWindow.Left y myWindow.Top, pero ¿de dónde obtengo los valores?

Encontré System.Windows.Forms.Screen.PrimaryScreen, que aparentemente no es WPF. ¿Existe una alternativa de WPF que me dé la resolución de pantalla o algo así?

Marcel B
fuente

Respuestas:

143

Pon esto en tu constructor de ventanas

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

.NET Framework Compatible con: 4, 3.5, 3.0

.NET Framework Client Profile Compatible con: 4, 3.5 SP1

Indy9000
fuente
2
Funcionó para mí (.NET 4) y también me gusta WindowStartupLocation.CenterOwnerpara algunas ventanas infantiles
Stonetip
El valor predeterminado es Manual. Ref: msdn.microsoft.com/en-us/library/…
CJBS
158

xaml

WindowStartupLocation="CenterScreen"
Pratik Deoghare
fuente
12
Prefiero usar WPF xaml. ¡Gracias! ;-)
James
1
¡Tan sencillo como eso!
Jim
1
Agregado a la etiqueta <Window> y funciona perfectamente :)
Junaid Khan
49

Aún puede usar la clase Screen desde una aplicación WPF. Solo necesita hacer referencia al ensamblado System.Windows.Forms desde su aplicación. Una vez que haya hecho eso, (y referenciado System.Drawing para el ejemplo a continuación):

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

... funciona bien.

¿Ha considerado establecer la propiedad de la ventana principal WindowStartupLocation en CenterScreen?

Michael Petrotta
fuente
1
oh ... no lo sabía. Gracias.
Marcel B
1
Estaba buscando WindowStartupLocation; Sabía que lo había visto antes, ¡muy útil!
Chocojosh
@Michael Petrotta Gracias. Debería mirar las propiedades con más frecuencia.
meffordm
8

¿Qué pasa con la clase SystemParameters en PresentationFramework? Tiene una propiedad WorkArea que parece ser lo que está buscando.

Pero, ¿por qué no funciona la configuración de Window.WindowStartupLocation? CenterScreen es uno de los valores de enumeración. ¿Tienes que modificar el centrado?

Eddie Butt
fuente
Gran hallazgo :) El problema con la pantalla central para mí al menos es que mi ventana de inicio de sesión es pequeña y si el usuario hace clic para iniciar sesión mientras se abre la aplicación, a menudo pasa desapercibida y pasa a segundo plano. Pero si puedo abrirlo en la pantalla principal en el centro, funciona bien. nota: la mayoría de los usuarios tienen más de 4 pantallas
Michal Ciechan
Más de 4 pantallas, ¡cuenta conmigo!
user7116
7

No es necesario que haga referencia al System.Windows.Formsensamblado desde su aplicación. En su lugar, puede usar System.Windows.SystemParameters.WorkArea. ¡Esto es equivalente al System.Windows.Forms.Screen.PrimaryScreen.WorkingArea!

Mimi
fuente
2

No hay equivalente de WPF. System.Windows.Forms.Screensigue siendo parte del marco .NET y se puede utilizar desde WPF.

Consulte esta pregunta para obtener más detalles, pero puede usar las llamadas relacionadas con las pantallas usando la WindowInteropHelperclase para ajustar su control WPF.

Jeff Yates
fuente
2
var window = new MyWindow();

para uso en el centro de la pantalla:

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

para el centro de la ventana principal, use:

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
Artem
fuente
0

Prefiero ponerlo en el código WPF.

En [WindowName].xamlarchivo:

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