共用方式為


如何關閉視窗或對話方塊 (WPF .NET)

在本文中,您將了解關閉視窗或對話方塊的不同方式。 使用者可以使用非工作區中的元素來關閉視窗,包括下列項目:

  • [系統] 功能表的 [關閉] 項目。
  • 按下 ALT + F4
  • 按下 [關閉] 按鈕。
  • 在強制回應視窗中將 IsCancel 屬性設定為 true 時,按 ESC 鍵。

設計視窗時,請為工作區提供更多用來關閉視窗的機制。 視窗中用來關閉該視窗的一些常見設計元素包括下列各項:

  • [檔案] 功能表中的 [結束] 項目,通常是針對主要的應用程式視窗。
  • [檔案] 功能表中的 [關閉] 項目,通常是在次要的應用程式視窗。
  • [取消] 按鈕,通常是在強制回應對話方塊。
  • [關閉] 按鈕,通常是在非強制回應對話方塊。

重要

關閉某個視窗後,就無法使用相同的物件執行個體來重新開啟該視窗。

如需視窗存留期的詳細資訊,請參閱 WPF 視窗概觀:視窗存留期

關閉強制回應視窗

關閉使用 ShowDialog 方法開啟的視窗時,請將 DialogResult 屬性設定為 truefalse,以分別表示「已接受」或「已取消」狀態。 一旦 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 事件。 處理常式會傳遞實作 Cancel 屬性的 CancelEventArgs。 請將此屬性設定為 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 視窗概觀:取消關閉視窗

另請參閱