Событие закрытия сработало дважды при установке exitButton.IsCancel = True - PullRequest
6 голосов
/ 02 декабря 2011

Я понял, когда я установил кнопку выхода с атрибутом IsCancel = True, событие закрытия окна сработает дважды.

    private void exitButton_Click(object sender, RoutedEventArgs e)
    {
        // this button was set attribute IsCancel = True.
        Close();          
    }

    private void BaseWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {          
        MessageBox.Show("test"); // this message box will show twice
                                 // when you click on the exit button
        e.Cancel = true;
    }

Это ошибка WPF?Есть ли обходной путь?

Ps: Извините, я забыл сказать, что эта ошибка возникает только при вызове вашего окна из родительского окна.

1 Ответ

5 голосов
/ 02 декабря 2011

Наверное, я не вижу, где это неожиданное поведение.

Если вы назначите это как кнопку Cancel и вызовете .ShowDialog(), то нажатие кнопки закроет окно.

Вы добавили свой собственный вызов к Close() и отменили закрытие, так что оба вызова сделаны, и событие поднято оба раза.

обновление

В ответ на ваш комментарий о том, почему он может вести себя так, как он работает, свойства IsCancel и IsDefault предоставляют простой механизм для определения диалогов только с использованием XAML. Они избавляют вас от необходимости заходить в код для определения стандартных обработчиков щелчков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...