0

必要な場合は、ページに移動するときに引数をページに渡しますが、必要ですか?これを行わずにどのページが Navigate() を呼び出したかを知る方法はありますか?

4

3 に答える 3

2

PreviousPageと呼ばれるApplicationオブジェクトに静的プロパティを保持します。すべてのページ(または基本クラス)のOnNavigatedFromイベントで、PreviousPageを「this」(現在のページ)に設定します。OnNavigatedToイベントでは、そのApplication.PreviousPageプロパティを確認し、適切と思われる方法で使用できます。これは、WindowsストアアプリケーションのフレームワークにFrame.BackStackプロパティがないため、前のページにアクセスするための最も効果的な方法です。

于 2012-12-14T19:51:01.467 に答える
1

使用できますGetNavigationStateが、望ましくない副作用がいくつかあります (現在のページから離れて移動し、文字列は内部にあり、どのように変更されるか、または変更されないかについての保証はありません)。渡したほうがいいと思います。

このメソッドを呼び出すと、NavigationMode.Forward を使用して現在のページの Page.OnNavigatedFrom が呼び出されます。GetNavigationState は通常、アプリケーションが中断されているときに呼び出されるため、現在のページは別の場所に移動されます。

ノート:

これらのメソッドで使用されるシリアル化形式は、内部使用専用です。アプリは、それに依存関係を形成するべきではありません。さらに、この形式は、文字列、文字、数値、および GUID 型などの基本型のシリアル化のみをサポートします。

于 2012-12-14T19:21:05.233 に答える
0

私はこの正確な問題に遭遇し、カレブの答えは非常に役に立ちました. 彼のソリューションをどのように使用したかを明確にするために、いくつかのコードを投稿したかっただけです。

免責事項私は C# に少し (非常に!) 慣れていません。これを行うためのより良い方法があると確信していますが、他の誰かがもう少し詳細を探している場合に備えて、出発点として提供したかったのです。

前のページの状態を保持するために、アプリケーションの名前空間にグローバル変数を作成しました。

public static class global_vals{
    static object _previousPage;
    public static object previousPage
    {
        get
        {
            return _previousPage;
        }
        set
        {
            _previousPage = value;
        }
    }
}

各ページの OnNavigatedFrom メソッドは次のようになります。

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    base.OnNavigatedFrom(e);
    global_vals.previousPage = this;
}

OnNavigatedTo メソッドは、次のようにグローバル変数をチェックします。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    if (global_vals.previousPage.GetType().ToString() == "AppName.SomePage")
    {
        //do something
    }
}
于 2013-02-11T20:35:07.920 に答える