私は WPF NavigationWindow といくつかのページを使用しており、アプリケーションがいつページから閉じられるかを知りたいと考えています。
NavigationWindow_Closing イベント ハンドラーからページに積極的に通知せずに、これを行うにはどうすればよいでしょうか。
私はテクニックhereを認識していますが、残念ながら、アプリケーションが閉じられたときに NavigationService_Navigating は呼び出されません。
私は WPF NavigationWindow といくつかのページを使用しており、アプリケーションがいつページから閉じられるかを知りたいと考えています。
NavigationWindow_Closing イベント ハンドラーからページに積極的に通知せずに、これを行うにはどうすればよいでしょうか。
私はテクニックhereを認識していますが、残念ながら、アプリケーションが閉じられたときに NavigationService_Navigating は呼び出されません。
私があなたを正しく理解していれば、あなたの問題は、 内でホストされているコンテンツにアクセスする方法NavigationWindow
です。ウィンドウ自体が閉じていることを知ることは簡単です。たとえば、Closing
サブスクライブできるイベントがあります。
Page
でホストされているを取得するにはNavigationWindow
、 を使用VisualTreeHelper
して、唯一のWebBrowser
コントロールが見つかるまでその子孫にドリルダウンします。これを手動でコーディングすることもできますが、ネット上ですぐに使用できるこのような優れたコードがあります。
を取得した後は、プロパティWebBrowser
を使用してコンテンツを取得するのは簡単です。WebBrowser.Document
これを行う 1 つの方法は、関連するページで次のようなインターフェイスをサポートすることです。
public interface ICanClose
{
bool CanClose();
}
このインターフェイスをページ レベルで実装します。
public partial class Page1 : Page, ICanClose
{
public Page1()
{
InitializeComponent();
}
public bool CanClose()
{
return false;
}
}
ナビゲーション ウィンドウで、子が ICanClose であるかどうかを確認します。
private void NavigationWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
ICanClose canClose = this.Content as ICanClose;
if (canClose != null && !canClose.CanClose())
e.Cancel = true;
}