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



我正在使用WPF导航窗口和一些页面,并希望能够知道应用程序何时从页面关闭。
如果没有从NavigationWindow_Closing事件处理程序主动通知页面,如何做到这一点?

我知道这里的技术,但不幸的是,当应用程序关闭时,没有调用navigationservice_navigation

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

要使Page驻留在NavigationWindow中,您可以使用VisualTreeHelper向下钻取它的后代,直到找到唯一的WebBrowser控件。您可以手动编写这些代码,但是在网络上有像这样的好代码可以使用。

获得WebBrowser之后,使用WebBrowser.Document属性获取内容非常容易。

一种方法是让相关页面支持如下接口:

public interface ICanClose
{
     bool CanClose();
}

在页面级别实现这个接口:

public partial class Page1 : Page,  ICanClose
{
    public Page1()
    {
        InitializeComponent();
    }
    public bool CanClose()
    {
        return false;
    }
}

在导航窗口中,检查子对象是否为icclose:

private void NavigationWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    ICanClose canClose = this.Content as ICanClose;
    if (canClose != null && !canClose.CanClose())
        e.Cancel = true;
}

最新更新