如何關閉視窗或對話方塊 (WPF .NET)
在本文中,您將了解關閉視窗或對話方塊的不同方式。 使用者可以使用非工作區中的元素來關閉視窗,包括下列項目:
- [系統] 功能表的 [關閉] 項目。
- 按下 ALT + F4。
- 按下 [關閉] 按鈕。
- 在強制回應視窗中將 屬性設定為 IsCancel 時,按
true
鍵。
設計視窗時,請為工作區提供更多用來關閉視窗的機制。 視窗中用來關閉該視窗的一些常見設計元素包括下列各項:
- [檔案] 功能表中的 [結束] 項目,通常是針對主要的應用程式視窗。
- [檔案] 功能表中的 [關閉] 項目,通常是在次要的應用程式視窗。
- [取消] 按鈕,通常是在強制回應對話方塊。
- [關閉] 按鈕,通常是在非強制回應對話方塊。
重要
關閉某個視窗後,就無法使用相同的物件執行個體來重新開啟該視窗。
如需視窗存留期的詳細資訊,請參閱 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 視窗概觀:取消關閉視窗。