我正在使用WPF NavigationWindow和一些頁面,並希望能夠知道應用程序何時關閉頁面。
如何在沒有主動通知NavigationWindow_Closing事件處理程序的頁面的情況下完成此操作?如何取消從頁面關閉的WPF應用程序?
我知道的技術here的,但不幸的是,當應用程序被關閉NavigationService_Navigating不叫。
我正在使用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