6

我想知道是否有人可以帮助我解决这个相当莫名其妙的情况。我有一个 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 表单就会消失,并且似乎没有任何方法可以返回它!我读过这篇相似但不一样的文章(纯 WPF 应用程序),所以我可以理解为什么主应用程序没有出现在 ALT+TAB 菜单中,但是谁能告诉我如何返回 wpf 表单?

提前致谢。

4

2 回答 2

6

的使用WindowsInteropHelper允许您使用 Winforms-form 包装托管的 WPF-form 并将其父级设置为 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;
于 2012-08-09T16:27:49.260 回答
1

这与 Winforms 或 WPF 无关,这是 Windows 运行的方式。我认为您拥有的唯一解决方案是连接您的方式;即拦截Activated您的 Winforms 表单上的事件,如果您的 WPF 工具窗口可见,则将该窗口向前移动并赋予其焦点。

于 2012-06-11T15:18:20.330 回答