2009-09-07 21 views
6

Est-il possible d'afficher une fenêtre modale à partir d'un contrôle utilisateur WPF, c'est-à-dire un enfant d'un ElementHost, et définir le propriétaire/parent de la fenêtre modale sur le contrôle Form Form?WPF ShowDialog et ElementHost

Je suppose que vous ne pouvez pas faire cela, car la propriété Owner prend une instance de Window, où je veux le définir au parent du contrôle Element Host, qui est un ancien contrôle Windows Forms Form. Je me demande simplement s'il y a un travail ou une approche alternative. Le problème est lorsque la fenêtre modale est affichée et que l'utilisateur bascule vers une autre application, puis de nouveau, la fenêtre modale est masquée et l'utilisateur est incapable d'interagir avec la fenêtre principale. Cela est dû au fait que Windows pense que la fenêtre modale est toujours affichée, alors que ce n'est pas le cas, car il n'y a pas de relation propriétaire/parent.

Cheers, James.

Répondre

8

J'utilise WindowInteropHelper pour résoudre ce problème comme celui-ci:

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

wpfDialog.ShowDialog(); 
+0

Bonjour, merci. Résolu mon problème. – ayc

4

Je sais que ce poste est vieux, mais je suis tombé sur un moyen de trouver la fenêtre Winform qui héberge la ElementHost du contexte d'un UserControl wpf dans lequel vous n'avez pas accès à la fenêtre winform. J'ai trouvé cela utile pour ne pas avoir à passer la fenêtre de l'hôte.


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