Share via


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

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

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

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

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

重要

一旦視窗關閉,就無法使用相同的物件實例來重新開啟視窗。

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

關閉強制回應視窗

關閉以 ShowDialog 方法開啟的視窗時,請將 屬性設定 DialogResulttruefalse ,分別表示「已接受」或「已取消」狀態。 一旦屬性 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 視窗概觀:取消視窗關閉

另請參閱