Necesito acceder a los identificadores de ventana de Win32 de algunas de mis ventanas WPF para que pueda manejar los mensajes de activación de Win32. Sé que puedo usar PresentationSource.FromVisual
o WindowInteropHelper
para obtener el identificador de la ventana Win32, pero estoy teniendo problemas si todavía no se ha creado la ventana de WPF.Forzar la creación de un identificador Win32 nativo de WPF Window
Si uso PresentationSource.FromVisual
y la ventana no se ha creado, el PresentationSource
devuelto es nulo. Si utilizo WindowInteropHelper
y la ventana no se ha creado, la propiedad Handle
es IntPtr.Zero
(nulo).
Intenté llamar a this.Show()
y this.Hide()
en la ventana antes de intentar acceder al identificador. Puedo obtener el asa, pero la ventana parpadea momentáneamente en la pantalla (¡feo!).
¿Alguien sabe de una manera de forzar que se cree una ventana de WPF? En Windows Forms, esto fue tan fácil como acceder a la propiedad Form.Handle
.
Editar: Terminé yendo con una variante de la respuesta de Chris Taylor. Aquí está, en el caso de que ayuda a otra persona:
static void InitializeWindow(Window window)
{
// Get the current values of the properties we are going to change
double oldWidth = window.Width;
double oldHeight = window.Height;
WindowStyle oldWindowStyle = window.WindowStyle;
bool oldShowInTaskbar = window.ShowInTaskbar;
bool oldShowActivated = window.ShowActivated;
// Change the properties to make the window invisible
window.Width = 0;
window.Height = 0;
window.WindowStyle = WindowStyle.None;
window.ShowInTaskbar = false;
window.ShowActivated = false;
// Make WPF create the window's handle
window.Show();
window.Hide();
// Restore the old values
window.Width = oldWidth;
window.Height = oldHeight;
window.WindowStyle = oldWindowStyle;
window.ShowInTaskbar = oldShowInTaskbar;
window.ShowActivated = oldShowActivated;
}
// Use it like this:
InitializeWindow(myWpfWindow);
¿Has visto esta pregunta - http://stackoverflow.com/questions/1556182/finding-the-handle-to-a-wpf-window? Podría no ser de ayuda, ya que no menciona si la ventana ya existe o no. – ChrisF
@ChrisF: ¡Gracias! Sí, he visto eso. Desafortunadamente, todavía no se ha creado el problema con la ventana. –
Pensé en mencionarlo para obtener su respuesta, de modo que si su caso fuera diferente, no fuera seleccionado como duplicado. – ChrisF