2011-10-21 49 views
1

這是一個WPF/C#應用程序,與代碼問題相比,我有更多的設計問題。在沒有觸發Window_Closed事件的情況下關閉窗口

我有5個獨立的* .xaml文件實現從窗口派生的類。所以,5個窗口。這是一種嚮導類型的應用程序,因此每個窗口都有後​​退/下一個按鈕,這些按鈕將創建一個新窗口,隱藏自身並顯示新窗口。

這不是純粹基於引導的(所以我沒有使用的頁面),因爲有時我想跳過一個窗口,或者回到第一個窗口,等

每次打開一個新的窗口時間父窗口將自己設置爲新窗口的所有者並隱藏自身。當使用後退按鈕時,新窗口顯示所有者並自行關閉。這適用於導航。

當有人真正關閉窗口而不是使用導航時,我遇到問題。如果他們關閉窗口,Alt-F4,擊中X等,它應該關閉整個應用程序。

我的'返回'按鈕也關閉窗口,該窗口觸發Window_Closed,關閉整個應用程序。

我想要一個關閉整個應用程序的方式,當用戶關閉窗口,但只關閉窗口(不隱藏它,實際處置它),並顯示所有者時,他們點擊回來。如果不觸發前者,我似乎無法做到後者。

有什麼建議嗎?我只是沒有想到這是正確的方式。

回答

2

而不是在Windows之間翻轉,我建議在面板中的UserControl之間翻轉。除了不必擔心其打開/關閉狀態之外,您具有窗口的全部功能。根據Next/Previous命令,讓UserControls切換可見性。

您可能會考慮爲您的嚮導進行導航。你可以在WPF中做這個demonstrated here

通過導航,您可以擁有一個承載頁面的單個窗口。然後,您可以發出命令導航到特定頁面,並自動翻頁到頁面,而無需擔心控件的可見性。

+0

我看着使用導航,實際上觀看了特定的視頻。這真的不是我想要的。這具有更多的網頁導航功能,並可讓您在頁面之間跳轉。在每種情況下,我都有非常明確的「後退」和「下一個」的規則 - 他們可能跳過頁面或根據上下文運行代碼。 我也在我的5個窗口中使用usercontrols,他們本質上是1個或更多的用戶控件,所以這可能值得研究。我不得不將邏輯放回控制檯,然後放到窗口中,但這可能是值得的 – Eric

+0

@ user783106 - 是的,您需要將後/下一個彈出到主窗口中,然後移出您的託管控制。當他們點擊返回/下一步時,您可以使用任何規則選擇下一個用戶控件。如果您不想使用導航,請自行切換可見性。 –

+0

但只是一個側面說明,你可以使用導航規則。有一個名爲NavigateTo的方法(「頁面的字符串名稱」)。當他們點擊一個按鈕時,在代碼隱藏中,您將運行任何需要確定下一頁的邏輯。當您準備好顯示它時,只需調用NavigateTo()傳遞下一頁的名稱(如果需要,可以是完全動態的)。 –

1

首先,我不會做出5個不同的windows,而是一個單獨的窗口,並在嚮導頁面更改時替換它的內容。這對用戶來說看起來更自然,而且問題根本不會表現出來。第二,如果你堅持使用多窗口設計,我只需退訂按鈕中的Close按鈕點擊處理程序(並在重新打開窗口時重新訂閱)。

+0

從用戶的角度來看,他們不知道有5個不同的窗口。位置和大小是相同的。我確實看到你的觀點。 你有沒有特別從關閉按鈕上的點擊處理程序退訂的例子?還有其他方法可以關閉窗口,例如alt-f4。當我在後退按鈕中關閉窗口時,是否建議將窗口的Closed事件與任何處理程序解除關聯?我認爲這是有道理的 – Eric

相關問題