取消关闭WPF对话框-IsCancel错误的解决方法

时间:2018-06-29 10:13:11

标签: c# wpf

我正在寻找3年前a WPF bug that was raised on MSDN的解决方法。在线程上,提出该问题的人建议,可以使用“命令而不是EventHandler”来解决该问题。我不知道该怎么做!

我有一个包含向导的WPF应用程序(以下是this广受好评的示例)。向导的每个页面都有一个“关闭”按钮:

  • 关闭单击处理程序必须将向导结果传递回父应用程序
  • 该按钮应标记为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 :(得分:0)

您可以替代对话框窗口的Click方法,而不是处理Button的{​​{1}}事件:

OnClosing

XAML:

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