如何取消关闭页面的WPF应用程序?

时间:2011-04-05 13:13:57

标签: c# wpf navigationwindow

我正在使用WPF NavigationWindow和一些页面,希望能够知道应用程序何时从一个页面关闭。
如果没有主动通知NavigationWindow_Closing事件处理程序中的页面,怎么办呢?

我知道技术here,但遗憾的是,当应用程序关闭时,不会调用NavigationService_Navigating。

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您的问题是如何访问NavigationWindow内托管的内容。知道窗口本身正在关闭是微不足道的,例如您可以订阅Closing个活动。

要获得Page中托管的NavigationWindow,您可以使用VisualTreeHelper向下钻取其后代,直到找到唯一的WebBrowser控件。您可以手动对此进行编码,但可以在网上使用good code like this

获得WebBrowser后,使用WebBrowser.Document属性轻松获取内容。

答案 1 :(得分:1)

执行此操作的一种方法是让所涉及的页面支持以下界面:

public interface ICanClose
{
     bool CanClose();
}

在页面级别实现此界面:

public partial class Page1 : Page,  ICanClose
{
    public Page1()
    {
        InitializeComponent();
    }

    public bool CanClose()
    {
        return false;
    }
}

在导航窗口中,检查孩子是否属于ICanClose:

private void NavigationWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    ICanClose canClose = this.Content as ICanClose;

    if (canClose != null && !canClose.CanClose())
        e.Cancel = true;
}