如何關閉視窗或對話方塊 (WPF .NET)
在本文中,您將瞭解關閉視窗或對話方塊的不同方式。 使用者可以使用非工作區中的元素來關閉視窗,包括下列專案:
- [系統] 功能表的 [關閉] 項目。
- 按下 ALT + F4。
- 按下 [關閉] 按鈕。
- 在強制回應視窗中將 IsCancel 屬性設定為
true
時,按 ESC 鍵。
設計視窗時,請為工作區提供更多機制來關閉視窗。 用來關閉視窗的一些常見設計項目包括下列各項:
- [檔案] 功能表中的 [結束] 項目,通常是針對主要的應用程式視窗。
- [檔案] 功能表中的 [關閉] 項目,通常是在次要的應用程式視窗。
- [取消] 按鈕,通常是在強制回應對話方塊。
- [關閉] 按鈕,通常是在非強制回應對話方塊。
重要
一旦視窗關閉,就無法使用相同的物件實例來重新開啟視窗。
如需視窗生命週期的詳細資訊,請參閱 WPF 視窗概觀:視窗存留期 。
關閉強制回應視窗
關閉以 ShowDialog 方法開啟的視窗時,請將 屬性設定 DialogResult 為 true
或 false
,分別表示「已接受」或「已取消」狀態。 一旦屬性 DialogResult
設定為值,視窗就會關閉。 下列程式碼示範如何設定 DialogResult
屬性:
private void okButton_Click(object sender, RoutedEventArgs e) =>
DialogResult = true;
private void cancelButton_Click(object sender, RoutedEventArgs e) =>
DialogResult = false;
Private Sub okButton_Click(sender As Object, e As RoutedEventArgs)
DialogResult = True
End Sub
Private Sub cancelButton_Click(sender As Object, e As RoutedEventArgs)
DialogResult = False
End Sub
您也可以呼叫 Close 方法。 Close
如果使用 方法,屬性 DialogResult 會設定為 false
。
一旦視窗關閉,就無法使用相同的物件實例重新開啟。 如果您嘗試顯示相同的視窗, InvalidOperationException 則會擲回 。 相反地,請建立視窗的新實例,並加以開啟。
關閉無強制回應視窗
關閉以 Show 方法開啟的視窗時,請使用 Close 方法。 下列程式碼示範關閉無強制回應視窗:
private void closeButton_Click(object sender, RoutedEventArgs e) =>
Close();
Private Sub closeButton_Click(sender As Object, e As RoutedEventArgs)
Close()
End Sub
使用 IsCancel 關閉
Button.IsCancel屬性可以設定為 true
,讓 ESC 鍵自動關閉視窗。 這只適用于使用 方法開啟 ShowDialog 視窗時。
<Button Name="cancelButton" IsCancel="True">Cancel</Button>
隱藏視窗
您可以使用 方法隱藏 Hide 視窗,而不是關閉視窗。 隱藏的視窗可以重新開啟,與已關閉的視窗不同。 如果您要重複使用視窗物件實例,請隱藏視窗,而不是關閉視窗。 下列程式碼示範隱藏視窗:
private void saveButton_Click(object sender, RoutedEventArgs e) =>
Hide();
Private Sub saveButton_Click(sender As Object, e As RoutedEventArgs)
Hide()
End Sub
取消關閉並隱藏
如果您已設計按鈕來隱藏視窗,而不是關閉視窗,使用者仍然可以略過此動作並關閉視窗。 系統 功能表的 [關閉 ] 專案和 視窗非工作區的 [關閉 ] 按鈕會關閉視窗,而不是隱藏視窗。 當您的意圖是隱藏視窗而不是關閉視窗時,請考慮此案例。
警告
如果視窗以 ShowDialog 強制回應方式顯示,則會 DialogResult 在隱藏視窗時將 屬性設定 null
為 。 您必須將自己的屬性新增至視窗,以將狀態傳回呼叫端程式碼。
關閉視窗時, Closing 就會引發 事件。 處理常式會傳遞 , CancelEventArgs 它會實作 Cancel 屬性。 將此屬性設定為 true
以防止視窗關閉。 下列程式碼示範如何取消關閉,並改為隱藏視窗:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// Cancel the closure
e.Cancel = true;
// Hide the window
Hide();
}
Private Sub Window_Closing(sender As Object, e As ComponentModel.CancelEventArgs)
' Cancel the closure
e.Cancel = True
' Hide the window
Hide()
End Sub
有時候您可能不想隱藏視窗,但實際上會防止使用者關閉視窗。 如需詳細資訊,請參閱 WPF 視窗概觀:取消視窗關閉 。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應