Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 取消关闭WPF对话框-IsCancel错误的解决方法_C#_Wpf - Fatal编程技术网

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

C# 取消关闭WPF对话框-IsCancel错误的解决方法,c#,wpf,C#,Wpf,3年前我一直在寻找一个解决办法。在这个线程上,提出它的人建议他们可以使用“命令而不是事件处理程序”来解决这个问题。我不知道该怎么做 我有一个WPF应用程序,其中包括一个向导(以下是广受好评的示例)。向导的每个页面都有一个关闭按钮: 关闭单击处理程序必须将向导结果传回父应用程序 该按钮应标记为IsCancel,以便Esc键触发该按钮 必须询问用户“是否确实要丢失更改?” 如果用户说“否”,则向导不应关闭。但是,由于上面的错误,它无论如何都会关闭 我的观点是这样的: <Button Tex

3年前我一直在寻找一个解决办法。在这个线程上,提出它的人建议他们可以使用“命令而不是事件处理程序”来解决这个问题。我不知道该怎么做

我有一个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;
   }
}
private void OnCloseClick(对象发送方,路由目标)
{
if(UserConfirmsTheyWantToLoseChanges())
{
OnReturn(新的ReturnEventArgs(MyWizardResult.cancelled));
}
其他的
{
e、 已处理=正确;
}
}

有谁能给我一个简单的例子,说明如何使用命令模式重新处理此问题吗?

您可以替代对话框窗口中的
关闭
方法,而不是处理
按钮的
单击
事件:

protected override void OnClosing(CancelEventArgs e)
{
    if (UserConfirmsTheyWantToLoseChanges())
    {
        OnReturn(new ReturnEventArgs<MyWizardResult>(MyWizardResult.Canceled));
    }
    else
    {
        e.Cancel = true;
    }
}
protected override void OnClosing(CancelEventArgs e)
{
if(UserConfirmsTheyWantToLoseChanges())
{
OnReturn(新的ReturnEventArgs(MyWizardResult.cancelled));
}
其他的
{
e、 取消=真;
}
}
XAML:

<Button Content="Close" IsCancel="True"/>


您链接到的错误特别是关于将e.handled设置为true以停止事件的进一步处理-您似乎没有这样做,因此它似乎不相关。您是否有当前正在使用的ICommand的实现,或者到目前为止您尝试了什么?@PaulF很好,Paul!我已经试过了,但没有把它包括在我的例子中。我现在已经修好了。遗憾的是,这个错误仍然存在。@mm8不,对不起。我以前没有在WPF中使用过ICommand(顺便说一句,这是我的第一个WPF项目,如果我误用了一些术语,我深表歉意)。我所看到的示例都显示了在视图模型或静态类中处理的命令:我认为我需要在视图代码中隐藏,这样我就可以调用OnReturn。那么您当前的代码实际上可以工作,但是您想实现MVVM模式吗?或者你有什么问题?谢谢你的建议@mm8。这对我来说不太管用,因为我使用的PageFunction没有onClose。最后,我将上面的OnClosing添加到我的主窗口中,但当然无法从主窗口调用OnReturn,以便将向导结果传回父应用程序。这在我的特殊情况下是可以忍受的,所以我同意了。