2009-09-07 27 views
6

¿es posible mostrar una ventana modal desde un control de usuario de WPF, que es un elemento secundario de ElementHost, y establecer el propietario/elemento principal de la ventana modal para el control de formulario que lo contiene?WPF ShowDialog y ElementHost

Supongo que no puede hacer esto, ya que la propiedad Owner toma una instancia de Window, donde como quiero establecerlo como el elemento principal del control Element Host, que es un antiguo control Formulario de Windows Forms. Me pregunto si hay un enfoque alternativo o alternativo.

El problema es cuando se muestra la ventana modal y el usuario cambia a otra aplicación, luego de nuevo, la ventana modal se oculta y el usuario no puede interactuar con la ventana principal. Esto se debe a que Windows piensa que la Ventana Modal sigue mostrándose, cuando no lo está, ya que no existe una relación Propietario/Padre.

Cheers, James.

Respuesta

8

estoy usando WindowInteropHelper para resolver ese problema como este:

var wpfDialog = new MyWpfDialog(); 
var interopHelper = new WindowInteropHelper(wpfDialog) 
     { 
      Owner = winFormsDialog.Handle 
     }; 

wpfDialog.ShowDialog(); 
+0

Hola, gracias. Resolvió mi problema. – ayc

4

Sé que este post es viejo, pero me encontré con una manera de encontrar la ventana WinForm que aloja el ElementHost desde el contexto de un UserControl de wpf donde es posible que no tenga acceso a la ventana de winform. Encontré esto útil para que no tenga que pasar la ventana de host.


HwndSource winformWindow = (System.Windows.Interop.HwndSource.FromDependencyObject(wpfControlInElementHost) as System.Windows.Interop.HwndSource); 
if (winformWindow != null) 
{ 
    var interopHelper = new WindowInteropHelper(wpfWindow) 
    { 
     Owner = winformWindow.Handle 
    }; 
} 
Cuestiones relacionadas