如何取消从页面关闭的WPF应用程序?
我正在使用WPF NavigationWindow和一些页面,并希望能够知道应用程序何时关闭页面。
如何在没有主动通知NavigationWindow_Closing事件处理程序的页面的情况下完成此操作?如何取消从页面关闭的WPF应用程序?
我知道的技术here的,但不幸的是,当应用程序被关闭NavigationService_Navigating不叫。
一种方法是有页面参与支持的接口,如:
public interface ICanClose
{
bool CanClose();
}
实现在页面级这个接口:
public partial class Page1 : Page, ICanClose
{
public Page1()
{
InitializeComponent();
}
public bool CanClose()
{
return false;
}
}
在导航窗口中,查看如果孩子是ICan关闭:
private void NavigationWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
ICanClose canClose = this.Content as ICanClose;
if (canClose != null && !canClose.CanClose())
e.Cancel = true;
}
[+1]我想出了正是这种解决方案现在,虽然我的方法称为CancelApplicationClosing():-) – Marc 2011-04-05 14:27:48
如果我理解正确,您的问题是如何访问NavigationWindow
内托管的内容。知道窗户本身正在关闭是微不足道的,例如,有可以订阅的Closing
事件。
要获取NavigationWindow
中承载的Page
,您可以使用VisualTreeHelper
深入了解其后代,直到找到唯一的WebBrowser
控制。您可以手动编写此代码,但可以使用网络上的good code like this。
获得WebBrowser
之后,通过WebBrowser.Document
属性可以轻松获得内容。要做到这一点
你的意思是,应该在应用程序决定时通知'Page'关闭?它可以做什么,你不能从主持页面的'Window'做到? – Jon 2011-04-05 13:17:56
@Jon:作为一个例子,页面可能不得不将某些UI元素的状态保存到设置中。该窗口无权访问这些UI元素。 – Marc 2011-04-05 13:28:23