Отмена закрытия диалогового окна WPF - обходной путь для ошибки IsCancel - PullRequest
0 голосов
/ 29 июня 2018

Я ищу обходной путь для ошибки WPF, которая возникла на MSDN 3 года назад. В потоке человек, который поднял его, предложил обойти это, используя «Команду вместо EventHandler». Я не могу понять, как это сделать!

У меня есть приложение WPF, которое включает в себя мастера (следуя этому хорошему примеру). Каждая страница мастера имеет кнопку Закрыть:

  • Обработчик щелчка при закрытии должен передать результат мастера в родительское приложение
  • Кнопка должна быть помечена IsCancel, чтобы клавиша Esc вызывала ее
  • Пользователю нужно задать вопрос «Вы уверены, что хотите потерять свои изменения?».

Если пользователь говорит «Нет», мастер не должен закрываться. Однако из-за вышеуказанной ошибки он закрывается независимо!

Мой взгляд просто имеет что-то вроде этого:

<Button Text="Close" Click=OnCloseClick IsCancel="True"/>

Мой обработчик кликов:

private void OnCloseClick(object sender, RoutedEventArgs e)
{
   if (UserConfirmsTheyWantToLoseChanges())
   {
      OnReturn(new ReturnEventArgs<MyWizardResult>(MyWizardResult.Canceled));
   }
   else
   {
      e.Handled = true;
   }
}

Может ли кто-нибудь дать мне простой пример того, как это может быть переработано с использованием шаблона Command?

1 Ответ

0 голосов
/ 29 июня 2018

Вместо обработки события Click для Button вы можете переопределить метод OnClosing диалогового окна:

protected override void OnClosing(CancelEventArgs e)
{
    if (UserConfirmsTheyWantToLoseChanges())
    {
        OnReturn(new ReturnEventArgs<MyWizardResult>(MyWizardResult.Canceled));
    }
    else
    {
        e.Cancel = true;
    }
}

XAML:

<Button Content="Close" IsCancel="True"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...