Encontrar el identificador de una ventana de WPF


109

Los formularios de Windows tenían una propiedad win1.Handle que, si mal no recuerdo, devuelve el identificador del identificador de la ventana principal.

¿Existe una forma equivalente de obtener el identificador de una ventana de WPF?

Encontré el siguiente código en línea,

IntPtr windowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;

pero no creo que eso me ayude porque mi aplicación tiene múltiples ventanas.

¡¡Gracias!!


24
Déjame darte un consejo amistoso, Evan. ¡No hagas programación de culto a la carga! Analiza el código que encontraste en línea. Puede ver claramente que pasa Application.Current.MainWindow, y por eso puede razonar que al pasarle una referencia a una ventana diferente, obtendrá su respuesta. Nunca he usado WindowInteropHelper, pero aún así pude responder la pregunta simplemente razonando.
Gregory Higley

1
tienes razón, gracias! Hoy estoy cansado :).
Evan

5
¡No hay problema! Y no lo dije como una crítica, solo para ser útil. Todos hemos hecho un pequeño corte de carga de vez en cuando. :)
Gregory Higley

Respuestas:


142

Bueno, en lugar de pasar Application.Current.MainWindow, simplemente pase una referencia a la ventana que desee: new WindowInteropHelper(this).Handley así sucesivamente.


Acabo de descubrir que el cuadro de diálogo común FileSave toma una referencia a una ventana de nivel superior, por lo que puede pasar, por ejemplo, una referencia a la ventana principal de la aplicación. Guarde los servicios de interoperabilidad para cuando realmente los necesite.
David A. Gray

39

Simplemente use su ventana con la clase WindowsInteropHelper:

// ... Window myWindow = get your Window instance...
IntPtr windowHandle = new WindowInteropHelper(myWindow).Handle;

En este momento, está solicitando la ventana principal de la Aplicación, de la cual siempre habrá una. Sin embargo, puede usar esta misma técnica en cualquier ventana, siempre que sea una clase de ventana derivada de System.Windows.Window.



3

Si desea identificadores de ventana para TODAS las aplicaciones de su aplicación Windowpor alguna razón, puede usar la Application.Windowspropiedad para acceder a todas las ventanas y luego usar WindowInteropHandlerpara acceder a sus identificadores como ya ha demostrado.

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.