C# 如何从页面取消WPF应用关闭?
我正在使用WPF NavigationWindow和一些页面,希望能够知道应用程序何时从页面关闭。C# 如何从页面取消WPF应用关闭?,c#,wpf,navigationwindow,C#,Wpf,Navigationwindow,我正在使用WPF NavigationWindow和一些页面,希望能够知道应用程序何时从页面关闭。 如何在不从NavigationWindow\u关闭事件处理程序主动通知页面的情况下完成此操作 我知道这项技术,但不幸的是,当应用程序关闭时,NavigationService\u Navigation没有被调用。如果我理解正确,您的问题是如何访问位于NavigationWindow内的内容。知道窗口本身正在关闭并不重要,例如,您可以订阅关闭事件 要获取托管在导航窗口中的页面,可以使用向下钻取其子体
如何在不从NavigationWindow\u关闭事件处理程序主动通知页面的情况下完成此操作
我知道这项技术,但不幸的是,当应用程序关闭时,NavigationService\u Navigation没有被调用。如果我理解正确,您的问题是如何访问位于
NavigationWindow
内的内容。知道窗口本身正在关闭并不重要,例如,您可以订阅关闭
事件
要获取托管在导航窗口
中的页面
,可以使用向下钻取其子体,直到找到唯一的WebBrowser
控件。您可以手动编写代码,但在网络上已经可以使用了
获得
WebBrowser
后,使用属性获取内容非常容易。一种方法是让相关页面支持以下界面:
public interface ICanClose
{
bool CanClose();
}
在页面级别实现此接口:
public partial class Page1 : Page, ICanClose
{
public Page1()
{
InitializeComponent();
}
public bool CanClose()
{
return false;
}
}
在导航窗口中,检查子项是否处于关闭状态:
private void NavigationWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
ICanClose canClose = this.Content as ICanClose;
if (canClose != null && !canClose.CanClose())
e.Cancel = true;
}
您的意思是当应用程序决定关闭时,应该通知
页面
?在托管页面的窗口
中,它可以做哪些您还不能做的事情?@Jon:例如,页面可能必须将某些UI元素的状态保存到设置中。窗口没有访问这些UI元素的权限。[+1]虽然我的方法称为CancelApplicationClosing():-,但我现在提出的正是这个解决方案