2009-06-01 29 views
81

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

He encontrado System.Windows.Forms.Screen.PrimaryScreen, que al parecer no es WPF. ¿Hay alguna alternativa de WPF que me brinde la resolución de pantalla o algo así?

Respuesta

90

Pon esto en la ventana de su constructor

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; 

.NET FrameworkSupported con: 4, 3.5, 3.0

.NET Framework Client ProfileSupported con: 4, 3.5 SP1

+2

Funcionó para mí (.NET 4) y también me gusta 'WindowStartupLocation.CenterOwner' para algunas ventanas secundarias – Stonetip

+0

El valor predeterminado es' Manual'. Ref: https://msdn.microsoft.com/en-us/library/system.windows.window.windowstartuplocation%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 – CJBS

48

Puede seguir utilizando la clase de pantalla de una aplicación WPF. Solo necesita hacer referencia al ensamblado System.Windows.Forms desde su aplicación. Una vez que hayas hecho esto, (y se hace referencia System.Drawing para el ejemplo abajo):

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

... funciona muy bien.

¿Usted ha considerado el establecimiento de su ventana principal WindowStartupLocation propiedad a CenterScreen?

+1

oh ... No sabía que uno. Gracias. –

+1

Estaba buscando WindowStartupLocation; Sabía que lo había visto antes, ¡muy útil! – chocojosh

+0

@Michael Petrotta Gracias. Debería mirar las propiedades más a menudo. – meffordm

2

No hay equivalente en WPF. System.Windows.Forms.Screen sigue siendo parte del framework .NET y se puede usar desde WPF.

Consulte this question para obtener más información, pero puede usar las llamadas relacionadas con las pantallas utilizando la clase WindowInteropHelper para ajustar su control WPF.

8

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

Pero, ¿por qué no va a establecer el trabajo Window.WindowStartupLocation? CenterScreen es uno de los valores enum. ¿Tienes que modificar el centrado?

+0

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 mientras la aplicación se abre, a menudo pasa inadvertida y pasa al segundo plano. Pero si puedo abrirlo en la pantalla principal en el centro, funciona bien.nota: la mayoría de los usuarios tienen 4+ pantallas –

+0

4+ pantallas, ¡cuéntame! – user7116

109

xaml

WindowStartupLocation="CenterScreen" 
+6

Prefiero usar WPF xaml. ¡Gracias! ;-) – James

7

No necesita hacer referencia al ensamblaje System.Windows.Forms desde su aplicación. En cambio, puede usar System.Windows.SystemParameters.WorkArea. ¡Esto es equivalente al System.Windows.Forms.Screen.PrimaryScreen.WorkingArea!

1
var window = new MyWindow(); 

para el centro de la pantalla de uso:

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

para el centro de la utilización ventana padre:

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner; 
Cuestiones relacionadas