Закрытие окна или диалогового окна (WPF .NET)
В этой статье вы узнаете о различных способах закрытия окна или диалогового окна. Пользователь может закрыть окно с помощью элементов в не клиентской области, включая следующее:
- Элемент Закрыть меню Система.
- Нажатие клавиш ALT+F4.
- Нажатие кнопки Закрыть.
- Нажатие клавиши ESC, если свойство кнопки 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: закрытие окна отмены".
См. также
.NET Desktop feedback