我想知道是否有人能帮助我这个相当莫名其妙的情况。 我有一个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工具窗口是可见的,则将该窗口向前移动并给予焦点。