0

私の Windows Phone 8 アプリでは、ページ間を移動しています。いう

からMainPage一部のユーザーがクリックを制御)-> Page1キーを押すと、再びメインページに戻ります

MainPage一部のユーザーコントロール b クリックして)-> Page2から、キーを押してメインページに戻り、page3page4などに戻ります。

ここで、メインページがどのページから読み込まれたかを特定したいですか?

ナビゲーション履歴に従ってユーザーコントロールをロードしたいことに基づいて、 page1page2またはpage3と言います。

ライブラリに組み込みのプロパティまたは関数が見つかりませんでした。

このような機能を実現するためのベストプラクティスも探しています。

4

6 に答える 6

0

どのページから来たかを知る必要がある場合は、PhoneApplicationService.Current.Stateを使用できます。セカンダリ ページ内で、OnBackKeyPress をオーバーライドして値を設定します

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
    base.OnBackKeyPress(e);
    PhoneApplicationService.Current.State["LastPage"] = this; 
}

次に、MainPage で OnNavigatedTo をオーバーライドし、状態の値を確認します。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    object lastPage;
    if((e.NavigationMode == NavigationMode.Back) &&
        (PhoneApplicationService.Current.State.TryGetValue("LastPage", out lastPage)))
    {
        // we navigated back and we know what the last page was!
        var pageName = lastPage.GetType().Name;
        if (pageName == "Page1")
        {
            // do something!
        }
    }
}
于 2013-10-18T17:05:49.957 に答える
0

メインページに戻るときにパラメーターを渡すだけで、列挙型に「page1」「page2」が含まれている可能性があります...

于 2013-10-18T18:26:47.267 に答える
0

ハッシュテーブルをグローバルにします。

Hashtable ht = new Hashtable();
ht.Add("page1");
NavigationService.Navigate(new Uri("Page1.xaml", UriKind.Relative));
于 2013-10-18T06:55:54.913 に答える
0

NavigationServiceには、必要な情報と、 OnNavigatingFromに付属するNavigatingCancelEventArgsパラメータが含まれていないようです。

残念ながら、あなたのニーズに対応する組み込み機能はないようです。

ただし、できることは、ユーザーが最後にアクセスしたページを保持することです (廃棄シナリオを処理するため)。たとえば、AppSettings にある可能性があります。これは疑似コードです。

public class WhateverYouWantLastPagePersister
{
    private const string LastPageID = "LastPage";

    public string GetLastPage()
    {
        string lastPage = string.Empty;
        IsolatedStorageSettings.ApplicationSettings.TryGetValue<string>(LastPageID, out lastPage);
        return lastPage;
    }

    public void PersistLastPage(string lastPage)
    {
        IsolatedStorageSettings.ApplicationSettings[LastPageID] = lastPage;
    }
}

最後にアクセスしたページを「自動的に」永続化するには、PhoneApplicationPage から派生させ、 OnNavigatingFromをオーバーライドして独自のベース ページを作成します。

  public class BasePage : PhoneApplicationPage
    {
        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            base.OnNavigatedFrom(e);
            Uri currentUri = ((App)Application.Current).RootFrame.CurrentSource;
            WhateverYouWantLastPagePersister.PersistLastPage(CustomMethodToExtractPageNameFromUri(currentUri));
        }
    }

最後にアクセスしたページを保持する必要があるすべてのページは、そこから派生する必要があります (つまり、Page1、Page2...)

最後に、必要なものを取得するために使用できます。WhateverYouWantLastPagePersister.GetLastPage()

もちろん、これらの擬似コード サンプルでは:

  • lastPage は任意のタイプ (string、enum、int など) にすることができます。必要なのは、string から必要なものへの適切なカスタム コンバーターだけです。
  • CustomMethodToExtractPageNameFromUri単純な文字列パーサーです
  • WhateverYouWantLastPagePersister静的クラス、シングルトン、DI フレームワークを注入することができます。それはあなた次第です!
于 2013-10-18T08:17:03.223 に答える