2012-06-11 54 views
4

我想知道是否有人可以帮助我这个相当莫名其妙的情况。我有一个WPF表格myForm,我在WinForm应用程序中模态地显示(不使用ElementHost)。一切工作正常,如果我使用默认的WindowStyle,它显示在任务栏中。不过现在我不想的形式显示在任务栏中或含有最小化按钮,所以我也做了以下内容:WPF模态窗口作为WinForms中的工具窗口消失

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窗体?

在此先感谢。

+0

只是为了澄清,问题是,如果WPF工具窗口被主应用程序或其他应用程序后面推,你不能把窗口向前行吗? – CodingGorilla

+1

您是否尝试过设置toolwindow的所有者?如果你将winforms和wpf混合,这应该甚至可以工作。您可以使用WindowsInteropHelper或直接使用winapi调用SetParent。 – dowhilefor

+0

@CodingGorilla是的,这是正确的。 – Jeb

回答

4

采用WindowsInteropHelper允许您使用的Winforms形式来包装托管WPF的形​​式,并设置其父为的Winforms控制,这防止了WPF形式从消失(也如所指出的dowhilefor和Hans帕桑特)

如:

// 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

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