Закрытие окна или диалогового окна (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 помощью метода.
Скрытие окна
Вместо закрытия окна окно можно скрыть с 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: закрытие окна отмены».
См. также
- Общие сведения об окнах WPF
- Общие сведения о диалоговых окнах
- Открытие окна или диалогового окна
- System.Windows.Window.Close()
- System.Windows.Window.Closing
- System.Windows.Window.DialogResult
- System.Windows.Window.Hide()
- System.Windows.Window.Show()
- System.Windows.Window.ShowDialog()
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Как закрыть окно в WPF после нажатия кнопки в этом окне?
Вы устанавливаете контент новой страницы, а не делаете навигацию.
this.NavigationService.GoBack();
Тут происходит навигация в никуда, так как никакой навигации не было, было только переназначение контента.
Отслеживать
28.7k 4 4 золотых знака 40 40 серебряных знаков 81 81 бронзовый знак
ответ дан 16 сен 2017 в 22:20
886 1 1 золотой знак 9 9 серебряных знаков 15 15 бронзовых знаков
public void Button_Click(object sender, RoutedEventArgs e) < var page = new Page1(); page.Owner = this; // this.Content = page; /* Если раскомментировать, то выбросит исключение: Необработанное исключение типа "System.InvalidOperationException" Дополнительные сведения: Объект Window должен быть корнем дерева. Нельзя добавить объект Window как дочерний объект для Visual.*/ page.Show(); >
В дочернем окне:
private void Button_Click(object sender, RoutedEventArgs e)
Но имейте ввиду, что закроются оба окна.
Отслеживать
28.7k 4 4 золотых знака 40 40 серебряных знаков 81 81 бронзовый знак
ответ дан 17 сен 2017 в 20:58
460 3 3 серебряных знака 15 15 бронзовых знаков
- c#
- wpf
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Window. Close Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Вручную закрывает окно Window.
public: void Close();
[System.Security.SecurityCritical] public void Close ();
public void Close ();
[] member this.Close : unit -> unit
member this.Close : unit -> unit
Public Sub Close ()
Примеры
В следующем примере показано, что менювыхода изфайла | обрабатывается для явного вызова Close.
void fileExitMenuItem_Click(object sender, RoutedEventArgs e) < // Close this window this.Close(); >
Private Sub fileExitMenuItem_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) ' Close this window Me.Close() End Sub
Комментарии
Можно Window закрыть с помощью одного из нескольких хорошо известных системных механизмов, расположенных в строке заголовка, в том числе:
Можно Window также закрыть с помощью одного из нескольких известных механизмов в клиентской области, предоставляемых разработчиками, в том числе:
Кнопки «ОК» и «Отмена» в диалоговом окне также предоставляются разработчиком, хотя, скорее всего, задается параметр DialogResult, который автоматически закрывает окно, открытое путем вызова ShowDialog.
Эти механизмы требуют явного вызова Close для закрытия окна.
Если окно, открытое путем вызова ShowDialogи со свойством со свойством ButtonIsCancel true, автоматически закрывается при нажатии кнопки или нажатии клавиши ESC. Однако если окно было открыто с помощью Show, Close необходимо явно вызвать, например из Click обработчика Buttonсобытий для .
Закрытие окна приводит к возникновению Closing события. Closing Если событие не отменено, происходит следующее:
- удаляется Window из Application.Windows (если Application объект существует).
- Удаляется Window от владельца Window , если связь между владельцем и владельцем была установлена до отображения владельца Window и после открытия владельца Window .
- Возникает событие Closed.
- Неуправляемые ресурсы, созданные , Window удаляются.
- Если ShowDialog был вызван для отображения Window, ShowDialog возвращает .
Window Закрытие приводит к закрытию всех принадлежащих ему окон. Кроме того, закрытие Window может привести к остановке работы приложения в зависимости от того, как Application.ShutdownMode задано свойство.
Этот метод не может вызываться, если окно размещено в браузере.
Как закрыть окно wpf
Добрый день!
Есть окно. В нем DataGrid. SelectedItem забинден на свойство во ViewModel.
Есть две кнопки Применть и Отмена. Применить — закрывает окно, а Отменить закрывает окно и обнуляет выбранный пользователем элемент в DataGrid.
Соответственно хочу сделать биндинг кнопок к командам но не знаю как закрывать окно в ViewModel.Можно конечно команды перенести во View но не хотелось бы.
Как быть?
Спасибо!
Re: [WPF] WVVP закрытие окна
| От: | Lexxpin |
| Дата: | 09.06.10 07:13 |
| Оценка: |
А>Добрый день!
А>Есть окно. В нем DataGrid. SelectedItem забинден на свойство во ViewModel.
А>Есть две кнопки Применть и Отмена. Применить — закрывает окно, а Отменить закрывает окно и обнуляет выбранный пользователем элемент в DataGrid.
А>Соответственно хочу сделать биндинг кнопок к командам но не знаю как закрывать окно в ViewModel.Можно конечно команды перенести во View но не хотелось бы.
А>Как быть?
А>Спасибо!
Не помню как в WPF, в Silverlight окно закрывается, когда присваиваешь DialogResult окну.
Следовательно, в ViewModel должно быть свойство «окно закрыто» и сделать биндинг между этим свойством и DialogResult.
Если такой способ не прокатит, всегда можно сделать AttachedProperty и биндить свойство на него.
Re: [WPF] WVVP закрытие окна
| От: | MxMsk |
| Дата: | 09.06.10 07:27 |
| Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Добрый день!
Добрый
А>Есть окно. В нем DataGrid. SelectedItem забинден на свойство во ViewModel.
А>Есть две кнопки Применть и Отмена. Применить — закрывает окно, а Отменить закрывает окно и обнуляет выбранный пользователем элемент в DataGrid.
А>Соответственно хочу сделать биндинг кнопок к командам но не знаю как закрывать окно в ViewModel.Можно конечно команды перенести во View но не хотелось бы.
А>Как быть?
Разные есть варианты. Можно сделать специальный сервис, который модель будет вызвать для закрытия окна, а этот сервис уже будет иметь конкретную реализацию, заточенную на класс Window. Другой вариант, добавить в модель не только команду, но и событие. Это событие модель будет вызывать, когда решит, что окно надо закрыть. Твое окно подпишется на это событие и позовет себе Close. Таким образом, решение о закрытии мы возлагаем на модель.