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