7

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

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

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

干杯,詹姆斯。

4

3 回答 3

9

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

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

wpfDialog.ShowDialog();
于 2009-09-30T12:23:43.680 回答
5

我知道这篇文章很旧,但我遇到了一种方法,可以从 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
   };
}
于 2011-03-03T00:12:45.203 回答
2

好的,刚刚使用 WindowInteropHelper 找到了解决方案。

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

于 2009-09-07T03:54:06.343 回答