powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Есть ли в WPF аналог CloseReason, как было в WinForms?
13 сообщений из 13, страница 1 из 1
Есть ли в WPF аналог CloseReason, как было в WinForms?
    #36265784
NGcorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело вот какое...
И у окон WPF и у форм WinForms есть событие Closing. Когда мне требовалось изменить поведение форм при закрытии их щелчком по крестику, достаточно было подписаться на это событие, чтобы проверить причину закрытия и, например, просто скрыть форму. Видимо, разработчики WPF решили, что CloseReason - это бесполезная фишка... Или они опять сделали это "как-то по-другому"? Может кто с этим сталкивался?
Не, можно, конечно, и без этого обойтись, ну там все родные элементы у окна прятать, но хотелось по-нормальному сделать...
...
Рейтинг: 0 / 0
Есть ли в WPF аналог CloseReason, как было в WinForms?
    #36267362
Christopher Robin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NGcorp,
смотри Application.ShutdownMode
...
Рейтинг: 0 / 0
Есть ли в WPF аналог CloseReason, как было в WinForms?
    #36267380
Christopher Robin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а также событие SessionEnding у Application
...
Рейтинг: 0 / 0
Есть ли в WPF аналог CloseReason, как было в WinForms?
    #36268130
NGcorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, но так я смогу отловить только закрытие всего приложения, а мне нужно перехватывать закрытие пользователем экземпляров Window, созданных по ходу работы.
...
Рейтинг: 0 / 0
Есть ли в WPF аналог CloseReason, как было в WinForms?
    #36270972
sergiy_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у каждого элемента wpf есть событие unload
Фактически оно происходит при закрытии окна
очень удобно.
...
Рейтинг: 0 / 0
Есть ли в WPF аналог CloseReason, как было в WinForms?
    #36271643
NGcorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sergiy_s, к сожалению, не нашёл разницы между Unloaded и Closed для моей конкретной цели.

По сути мне требуется именно не допустить закрытие окна, если оно было инициировано пользователем, а, вместо этого, просто скрыть его.
...
Рейтинг: 0 / 0
Есть ли в WPF аналог CloseReason, как было в WinForms?
    #36271688
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NGcorpДело вот какое...

Про что этот топик? Вы документацию читали?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
w.Closing += w_Closing;
...

void w_Closing(object sender, CancelEventArgs e)
{
	var w = sender as Window;
	if (w != null)
	{
		w.Closing -= w_Closing;
		w.Visibility = Visibility.Hidden;
		e.Cancel = true;
	}
}

Или о чем речь?
...
Рейтинг: 0 / 0
Есть ли в WPF аналог CloseReason, как было в WinForms?
    #36271820
NGcorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman S. Golubin, спасибо за пример, но речь о том, что при закрытии окна пользователем я хочу это действие отменить, а в некоторых случаях мне нужно закрывать окна программно. Чтобы получить такое поведение на WinForms достаточно было подписаться на Form.Closing и проверить e.CloseReason.

По-видимому, в WPF просто не реализован такой механизм, так что придётся делать немного иначе.

Спасибо всем за содействие.
...
Рейтинг: 0 / 0
Есть ли в WPF аналог CloseReason, как было в WinForms?
    #36271838
NGcorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот, как всегда решение оказалось довольно простым. Наверное, если бы не задал этот вопрос, так бы и не нашёл ответа.

Вот, собственно, всё, что для этого было нужно, может кому и пригодиться:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        private bool _reallyClose;

        public void ReallyClose()
        {
            _reallyClose = true;
            Close();
        }

        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (!_reallyClose)
            {
                e.Cancel = true;
                Hide();
            }
        }

Теперь окно может быть и скрыто пользователем, и полностью закрыто программно.
...
Рейтинг: 0 / 0
Есть ли в WPF аналог CloseReason, как было в WinForms?
    #36271847
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NGcorpПо-видимому, в WPF просто не реализован такой механизм, так что придётся делать немного иначе.
В примере я привел, как отменить закрытие окна. Закрывать или нет - ваше дело. Если надо закрыть,
Код: plaintext
e.Cancel = false;
если не надо -
Код: plaintext
e.Cancel = true;
Что непонятно?
...
Рейтинг: 0 / 0
Есть ли в WPF аналог CloseReason, как было в WinForms?
    #36271855
NGcorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman S. Golubin, как раз-таки не было проблемы отменить закрытие окна...
Проблема была в том, чтобы узнать причину его закрытия.
Прошу прощения, если не смог понятно сформулировать вопрос.
...
Рейтинг: 0 / 0
Есть ли в WPF аналог CloseReason, как было в WinForms?
    #36271882
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NGcorpПроблема была в том, чтобы узнать причину его закрытия.
Проблема понятна. Непонятно, почему она у вас вызвала сложности.
...
Рейтинг: 0 / 0
Есть ли в WPF аналог CloseReason, как было в WinForms?
    #36271893
NGcorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видимо, в силу привычки. Не стало какой-то мелочи и не заметил сразу, как просто её на самом деле реализовать.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Есть ли в WPF аналог CloseReason, как было в WinForms?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]