WPF ShowDialog和ElementHost

时间:2009-09-07 02:53:57

标签: wpf owner showdialog elementhost

是否可以从WPF用户控件显示模态窗口,它是ElementHost的子级,并将模态窗口的所有者/父级设置为包含的Form控件?

我猜你不能这样做,因为Owner属性采用了Window的实例,我想把它设置为Element Host控件的父级,这是一个旧的Windows Forms Form控件。只是想知道是否有解决方法或替代方法。

问题是当显示模态窗口并且用户切换到另一个应用程序,然后再返回时,模态窗口被隐藏,用户无法与主窗口交互。这是因为Windows认为模态窗口仍然显示,而不是,因为没有设置所有者/父关系。

干杯, 詹姆斯。

3 个答案:

答案 0 :(得分:8)

我正在使用WindowInteropHelper来解决这个问题:

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

wpfDialog.ShowDialog();

答案 1 :(得分:4)

我知道这篇文章很老,但是我找到了一种方法,可以从wpf UserControl的上下文中找到托管ElementHost的winform窗口,在那里你可能无法访问winform窗口。我发现这很有用,所以我不必通过主机窗口。


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

答案 2 :(得分:2)

好的,只需使用WindowInteropHelper找到解决方案。

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/44c903fb-9514-401c-ba85-58acd5293c1b