我正在使用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;
}