1

私は WPF NavigationWindow といくつかのページを使用しており、アプリケーションがいつページから閉じられるかを知りたいと考えています。
NavigationWindow_Closing イベント ハンドラーからページに積極的に通知せずに、これを行うにはどうすればよいでしょうか。

私はテクニックhereを認識していますが、残念ながら、アプリケーションが閉じられたときに NavigationService_Navigating は呼び出されません。

4

2 に答える 2

2

私があなたを正しく理解していれば、あなたの問題は、 内でホストされているコンテンツにアクセスする方法NavigationWindowです。ウィンドウ自体が閉じていることを知ることは簡単です。たとえば、Closingサブスクライブできるイベントがあります。

Pageでホストされているを取得するにはNavigationWindow、 を使用VisualTreeHelperして、唯一のWebBrowserコントロールが見つかるまでその子孫にドリルダウンします。これを手動でコーディングすることもできますが、ネット上ですぐに使用できるこのような優れたコードがあります。

を取得した後は、プロパティWebBrowserを使用してコンテンツを取得するのは簡単です。WebBrowser.Document

于 2011-04-05T13:42:45.143 に答える
1

これを行う 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;
}
于 2011-04-05T14:02:32.363 に答える