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

时间:2012-06-11 14:52:36

标签: c# .net wpf windows winforms

我想知道是否有人可以帮助我解决这个相当令人困惑的情况。我有一个WPF表单myForm,我在WinForm应用程序中模态显示(不使用ElementHost)。如果我使用默认的WindowStyle并且它显示在任务栏中,一切正常。但是现在我不希望表单显示在任务栏中或包含最小化按钮,因此我已经完成了以下操作:

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

现在,wpf表单按模式显示,没有最小化按钮。如果我现在在任务栏中选择“父”winform应用程序,wpf表单就会消失,似乎没有任何方法可以返回它!我读过类似但不一样的this(纯WPF应用程序),所以我可以理解为什么主应用程序没有出现在ALT + TAB菜单中,但任何人都可以告诉我如何返回到wpf表格?

提前致谢。

2 个答案:

答案 0 :(得分:4)

WindowsInteropHelper的使用允许您使用Winforms-form包装托管的WPF表单并将其父设置为Winforms控件,这可以防止WPF表单消失(如dowhilefor和Hans所指出的那样)顺便)

E.g:

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

答案 1 :(得分:1)

这与Winforms或WPF无关,这是Windows运行的方式。我认为你唯一的解决方案是连接你的模态;即截取Winforms表单上的Activated事件,如果您的WPF工具窗口可见,请将该窗口向前移动并使其聚焦。