Поделиться через


Закрытие окна или диалогового окна (WPF .NET)

В этой статье вы узнаете о различных способах закрытия окна или диалогового окна. Пользователь может закрыть окно с помощью элементов в не клиентской области, включая следующее:

  • Элемент Закрыть меню Система.
  • Нажатие клавиш ALT+F4.
  • Нажатие кнопки Закрыть.
  • Нажатие клавиши ESC, если свойство кнопки IsCancel имеет значение true в модальном окне.

При проектировании окна укажите дополнительные механизмы для клиентской области, чтобы закрыть окно. Некоторые распространенные элементы конструктора в окне, которые используются для закрытия, включают в себя следующее:

  • Элемент Выход в меню Файл, обычно для главных окон приложений.
  • Элемент Закрыть в меню Файл, как правило, применим для вторичных окон приложений.
  • Кнопка Отменить, обычно для модального диалогового окна.
  • Кнопка Закрыть, обычно для немодального диалогового окна.

Важно!

После закрытия окна один и тот же экземпляр объекта не может использоваться для повторного открытия окна.

Дополнительные сведения о жизни окна см. в разделе "Обзор окон 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 окна возникает событие. Обработчик передается 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: закрытие окна отмены".

См. также