C# 如何从页面取消WPF应用关闭?

C# 如何从页面取消WPF应用关闭?,c#,wpf,navigationwindow,C#,Wpf,Navigationwindow,我正在使用WPF NavigationWindow和一些页面,希望能够知道应用程序何时从页面关闭。 如何在不从NavigationWindow\u关闭事件处理程序主动通知页面的情况下完成此操作 我知道这项技术,但不幸的是,当应用程序关闭时,NavigationService\u Navigation没有被调用。如果我理解正确,您的问题是如何访问位于NavigationWindow内的内容。知道窗口本身正在关闭并不重要,例如,您可以订阅关闭事件 要获取托管在导航窗口中的页面,可以使用向下钻取其子体

我正在使用WPF 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():-,但我现在提出的正是这个解决方案