¿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í?

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


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


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?


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?


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!


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.


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;

0

Prefiero ponerlo en el código WPF.

En [WindowName].xamlarchivo:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.