Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Есть ли в WPF аналог CloseReason, как было в WinForms? / 13 сообщений из 13, страница 1 из 1
22.10.2009, 07:44
    #36265784
NGcorp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли в WPF аналог CloseReason, как было в WinForms?
Дело вот какое...
И у окон WPF и у форм WinForms есть событие Closing. Когда мне требовалось изменить поведение форм при закрытии их щелчком по крестику, достаточно было подписаться на это событие, чтобы проверить причину закрытия и, например, просто скрыть форму. Видимо, разработчики WPF решили, что CloseReason - это бесполезная фишка... Или они опять сделали это "как-то по-другому"? Может кто с этим сталкивался?
Не, можно, конечно, и без этого обойтись, ну там все родные элементы у окна прятать, но хотелось по-нормальному сделать...
...
Рейтинг: 0 / 0
22.10.2009, 16:05
    #36267362
Christopher Robin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли в WPF аналог CloseReason, как было в WinForms?
NGcorp,
смотри Application.ShutdownMode
...
Рейтинг: 0 / 0
22.10.2009, 16:08
    #36267380
Christopher Robin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли в WPF аналог CloseReason, как было в WinForms?
а также событие SessionEnding у Application
...
Рейтинг: 0 / 0
23.10.2009, 09:56
    #36268130
NGcorp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли в WPF аналог CloseReason, как было в WinForms?
Да, но так я смогу отловить только закрытие всего приложения, а мне нужно перехватывать закрытие пользователем экземпляров Window, созданных по ходу работы.
...
Рейтинг: 0 / 0
25.10.2009, 07:44
    #36270972
sergiy_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли в WPF аналог CloseReason, как было в WinForms?
у каждого элемента wpf есть событие unload
Фактически оно происходит при закрытии окна
очень удобно.
...
Рейтинг: 0 / 0
26.10.2009, 07:36
    #36271643
NGcorp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли в WPF аналог CloseReason, как было в WinForms?
sergiy_s, к сожалению, не нашёл разницы между Unloaded и Closed для моей конкретной цели.

По сути мне требуется именно не допустить закрытие окна, если оно было инициировано пользователем, а, вместо этого, просто скрыть его.
...
Рейтинг: 0 / 0
26.10.2009, 08:52
    #36271688
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли в WPF аналог CloseReason, как было в WinForms?
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
26.10.2009, 10:10
    #36271820
NGcorp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли в WPF аналог CloseReason, как было в WinForms?
Roman S. Golubin, спасибо за пример, но речь о том, что при закрытии окна пользователем я хочу это действие отменить, а в некоторых случаях мне нужно закрывать окна программно. Чтобы получить такое поведение на WinForms достаточно было подписаться на Form.Closing и проверить e.CloseReason.

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

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

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


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