2009-09-07 14 views
6

È possibile visualizzare una finestra modale da un controllo utente WPF, ovvero un figlio di un ElementHost, e impostare il proprietario/genitore della finestra modale sul controllo modulo contenente?WPF ShowDialog e ElementHost

Suppongo che non sia possibile farlo, poiché la proprietà Owner prende un'istanza di Window, dove si desidera impostarla sul padre del controllo Element Host, che è un vecchio controllo Form di Windows Form. Mi chiedo solo se c'è un lavoro in giro o un approccio alternativo.

Il problema è quando viene visualizzata la finestra modale e l'utente passa a un'altra applicazione, quindi di nuovo indietro, la finestra modale è nascosta e l'utente non è in grado di interagire con la finestra principale. Ciò è dovuto al fatto che Windows pensa che la Finestra modale sia ancora visualizzata, quando non lo è, in quanto non esiste un set di relazioni Proprietario/Genitore.

Cheers, James.

risposta

8

sto usando WindowInteropHelper per risolvere il problema in questo modo:

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

wpfDialog.ShowDialog(); 
+0

Ciao, grazie. Risolto il mio problema. – ayc

4

So che questo post è vecchio, ma ho trovato un modo per trovare la finestra WinForm che ospita il ElementHost dal contesto di un wpf UserControl in cui potresti non avere accesso alla finestra winform. Ho trovato questo utile per non dover passare la finestra dell'host in giro.


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