2011-08-26 89 views
12

我有一個WPF窗口,我不關閉。相反,我做Hide()和Show()它。現在,當我在一個記錄的Grid中的MainWindow中雙擊,它將觸發Show()窗口時,窗口將始終顯示在MainWindow後面。 我已經嘗試了休耕,但沒有成功:WPF - 將窗口帶到前面

view.Show(); 
view.Activate(); 
view.Topmost = true; 
view.Topmost = false; 
view.Focus();  

有沒有我可以使用帶來的窗口絕對在前另一種方式?我無法將MainWindow設置爲所有者。

+1

你要必須詳細說明「我不能將MainWindow設置爲所有者」。 – vcsjones

+0

因爲Windows之間沒有關係,所以我不會將MainWindow設置爲我的視圖的所有者。我應該可以打開很多窗口。 – BennoDual

+2

可能重複的[在WPF中將窗口置於前端](http://stackoverflow.com/questions/257587/bring-a-window-to-the-front-in-wpf) – CodeNaked

回答

27

Window.Activate是要走的路(如果你不想設置爲所有者)。如果這不起作用(如您所描述的那樣),則在另一個位置出現錯誤。 也許你的MainWindow有TopMost設置爲true?或者你有一個延遲的調用,將主窗口或控件集中在?

調用另一個答案中提出的ShowDialog()不是一個選項,除非您希望整個應用程序被阻止,直到模式打開的窗口關閉。

在Win32-Api中有一個error,如果WPF也影響窗口管理,但對問題的描述聽起來不像這樣。

此外在這裏一個黑客,但我希望你不需要它:

Dispatcher.BeginInvoke(new Action(delegate {  
     view.Activate(); 
     }), System.Windows.Threading.DispatcherPriority.ContextIdle, null); 
+0

謝謝,只有這個解決方案解決了我描述的問題。 – Sevenate

4

ShowDialog代替Show將允許窗口始終顯示在最前面。

+0

+1可能是答案! – CharithJ

+3

我不認爲這是答案,除非OP想要阻止其他窗口,只要添加打開的窗口打開。對我來說,這個問題聽起來不是這樣的。 – HCL

+0

他想把它帶到頂端,而不是讓它成爲模型。 – Oli

2
myWindow.WindowState = WindowState.Normal; 

爲我工作。

1

我有同樣的問題 - 我正在顯示一個窗口與所有者設置爲NULL從MouseDoubleClick事件。我意識到,(最終),我需要設置:

e.Handled = true

我的事件代碼完成之前。下面的Microsoft文件概述,當它在「顯著的和比較完整的方式」迴應你可能要標記事件的處理:

http://msdn.microsoft.com/en-us/library/ms747183.aspx

這是主觀的,但對我來說這是防止窗口我剛剛從用戶可見的位置打開。

1

我經歷了類似的問題,並找到了解決方案,使用其他答案的組合。一旦窗口是隱藏的,我把它在前臺用下面的代碼:

view.WindowState = WindowState.Normal; 
    view.Activate(); 

注:如果該窗口是隱藏最大化之前,該代碼將使它回來的最大化

+0

這對我有用,只是直接激活沒有。非常感謝您的建議! – ravuya