WPF模式窗口作为WinForms中的工具窗口消失

我想知道是否有人能帮助我这个相当莫名其妙的情况。 我有一个WPF窗体myForm ,我在WinForm应用程序(不使用ElementHost)模态显示。 一切工作正常,如果我使用默认的WindowStyle,它显示在任务栏中。 不过,现在我不希望窗体显示在任务栏或包含最小化button,因此我做了以下几点:

 MyForm myForm = new MyForm(); myForm.ShowInTaskbar = false; myForm.WindowStyle = System.Windows.WindowStyle.ToolWindow; myForm.WindowStartupLocation =System.Windows.WindowStartupLocation.CenterOwner; myForm.ShowDialog(); 

现在,wpf表单按照预期的方式显示,没有最小化button。 如果我现在select任务栏中的“父”winform应用程序,wpf表单消失,似乎没有任何方式返回到它! 我已经阅读了这是相似但不一样的(纯WPF应用程序),所以我可以理解为什么主要的应用程序不会出现在ALT + TAB菜单,但任何人都可以告诉我如何可以返回到WPFforms?

提前致谢。

WindowsInteropHelper的使用允许你从Winforms中包装一个托管的WPF表单,并将其父项设置为一个Winforms控件,这样可以防止WPF表单消失(同样由dowhilefor和Hans Passant指出)

例如:

 // Use the interop helper for the specified wpf window hosted by the win32 owner WindowInteropHelper wih = new WindowInteropHelper(wpfForm); wih.Owner = this.someWin32FormsControl.Handle; 

这与Winforms或WPF无关,这是Windows的功能。 我认为你唯一的解决办法是连接你的模式; 即截获Winforms表单上的Activated事件,并且如果您的WPF工具窗口是可见的,则将该窗口向前移动并给予焦点。