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