2011-04-05 75 views
1

我正在使用WPF NavigationWindow和一些頁面,並希望能夠知道應用程序何時關閉頁面。
如何在沒有主動通知NavigationWindow_Closing事件處理程序的頁面的情況下完成此操作?如何取消從頁面關閉的WPF應用程序?

我知道的技術here的,但不幸的是,當應用程序被關閉NavigationService_Navigating不叫。

+0

你的意思是,應該在應用程序決定時通知'Page'關閉?它可以做什麼,你不能從主持頁面的'Window'做到? – Jon 2011-04-05 13:17:56

+0

@Jon:作爲一個例子,頁面可能不得不將某些UI元素的狀態保存到設置中。該窗口無權訪問這些UI元素。 – Marc 2011-04-05 13:28:23

回答

1

一種方法是有頁面參與支持的接口,如:

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; 
} 
+0

[+1]我想出了正是這種解決方案現在,雖然我的方法稱爲CancelApplicationClosing():-) – Marc 2011-04-05 14:27:48

2

如果我理解正確,您的問題是如何訪問NavigationWindow內託管的內容。知道窗戶本身正在關閉是微不足道的,例如,有可以訂閱的Closing事件。

要獲取NavigationWindow中承載的Page,您可以使用VisualTreeHelper深入瞭解其後代,直到找到唯一的WebBrowser控制。您可以手動編寫此代碼,但可以使用網絡上的good code like this

獲得WebBrowser之後,通過WebBrowser.Document屬性可以輕鬆獲得內容。要做到這一點

相關問題