2009-08-06 30 views
2

我有一個窗口實例,它顯示我從一個按鈕,點擊呼叫wInstance.ShowDialog()和我按下Alt + F4關閉窗口。現在的問題是,我不能再次調用wInstance.ShowDialog()。我怎樣才能重新使用同一個窗口實例。有沒有辦法重新使用一個已經關閉的WPF窗口實例

例外: 無法設置可見性或來電顯示或ShowDialog的窗口關閉後。

+0

[WPF:在關閉後無法重新使用窗口]的可能重複(http://stackoverflow.com/questions/3568233/wpf-cannot-reuse-window-after-it-has-been-closed) – nemesv 2012-08-22 12:25:16

+0

這不能是一個較新的帖子的重複...當然,這個帖子是這個副本嗎? – Sheridan 2014-09-30 14:53:10

回答

9

你需要重寫wInstance OnClosing方法來設置可視窗口隱藏,並取消關閉事件。

protected override void OnClosing(System.ComponentModel.CancelEventArgs e) 
    { 
     this.Visibility = Visibility.Hidden; 
     e.Cancel = true; 
    } 
+0

謝謝馬丁,這是我前幾天問自己的問題的答案。 – Dennis 2009-08-09 22:17:11

+0

我在這裏遇到了同樣的問題,雖然當我嘗試再次使用窗口時會停止異常,但是當我期望的時候,它會阻止ShowDialog()返回true。你有什麼建議嗎? – 2010-10-18 19:47:40

+0

ShowDialog()的返回值指示對話框的處理方式。如果這個信息對你很重要,那麼當它關閉時,你將需要實際處理窗口,所以你不應該取消關閉事件,而是當你想重新打開時實例化一個新窗口。如果窗口的狀態信息很重要,請考慮記憶模式。 – 2010-10-27 06:26:09

1

究竟是什麼力量使得它如此重要的是使用相同的窗口? 如果您使用的是MVVM,則可以將視圖模型重新用於新窗口。

+0

但我想消除創建新窗口實例的成本。因此檢查是否存在可重用範圍並在實例上再次使用ShowDialog()。 – 2009-08-07 18:24:00

+0

您的窗口創建成本高嗎? – Botz3000 2009-08-08 15:14:37

+0

Martin Doms的回答是正確的,但我自己對這個問題非常好奇。是否有可能高估了創建此視圖的開銷,特別是如果您使用MVVM並保持虛擬機周圍? – 2009-08-09 05:54:37

0

我將窗口重用爲使用樹視圖的對話框,並且客戶端希望樹分支保持打開狀態以進行更多選擇。

的覆蓋工作了再利用,及分支機構保持擴張。

我不使用視圖模型,以保持它的簡單,因爲它是一個只讀選擇對話框。但由於我似乎無法清除選擇,我可能不得不切換到視圖模型。

相關問題