2012-06-11 82 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工具窗口可見,則將該窗口向前移動並將其聚焦。