7

ページ間を移動すると、戻る/進む、または「ホームページ」ページに戻ることができる機能があることがわかります。ただし、必要なのは、戻ることができるようにすることですが、ユーザーがこれ以上アクセスできないようにする必要があるページをスキップすることです。私は周りを検索して、次のものを見つけました:http ://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/3819f389-3bfc-4c59-a919-272927fc9229

GetNavigationStackを使用しようとしましたが、シリアル化できず、NavigationParameterとして渡したオブジェクトが原因で失敗し続けます。タプルを使用して2つのパラメーターを渡す必要がありますが、これをシリアル化できないため、ナビゲーションスタックで編集してページを手動で削除することができません。

次に、このWinRTを見つけました-ナビゲーション履歴からページを無視または削除する方法と、ページをスキップする場合に設定できるブール値を含めることができると思いました

LayoutAwarePage.csすべての画面が継承するクラス、Visual Studioによって生成される)ではprotected bool CanGoBackToThisPage { get; set; }、このページにアクセスしたくない場合に設定できるものを追加しましたが、これには問題があります。現在のページで何かを行うまで、ページに再度アクセスできます。私はあなたがのようなことをすることができるとは思わないpreviousFrame.CanGoBackToThisPage = true。また、Frameアクセスできるオブジェクトは(私が思うに)実際のページオブジェクトにはアクセスできませんが、代わりにいくつかのサマリーオブジェクトがあり、このブール値をそのサマリーオブジェクトに取り込む方法がわかりません。

ナビゲーションスタックから前/現在のページを削除する簡単な方法を知っている人はいますか?これは本当に一般的な問題のように思われるので、Microsoftが私たちにそれを行う方法を提供していないと思うのに苦労しています。

ありがとう

4

5 に答える 5

5

わかりました。質問を投稿する前に、なぜそれを考えなかったのかわかりません。多分私はただ疲れています。

2回電話Frame.GoBack()してから、移動したいページに移動しました。

// If the user presses back we don't want them to visit this page or the previous page they were on so remove them from the navigation stack
Frame.GoBack();
Frame.GoBack();

// Go to the detail page
this.Frame.Navigate(typeof(GroupDetailPage), mGroup);

電話をかけると実際に前のページにアニメーション化されると思いGoBack()ましたが、そうではありません

于 2012-12-26T22:49:59.803 に答える
3
Frame.BackStack.RemoveAt(Frame.BackStack.Count - 1);

彼の答えが役に立ったので、私はgvmaniに小道具を与えなければなりませんが、それは完全ではありませんでした。

これにより、loadstateイベントがトリガーされるという上記の問題が回避され、より洗練されたソリューションになります。

于 2013-12-11T08:46:38.720 に答える
2

私は同じ問題に遭遇し、離れてナビゲートした後にBackStackから現在のページを削除することでこれを解決しました:

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
  base.OnNavigatedFrom(e);

  // Remove current page from history
  var pageStackEntry = Frame.BackStack.Last(entry => entry.SourcePageType == this.GetType());
  Frame.BackStack.Remove(pageStackEntry);
}
于 2014-06-16T09:55:16.157 に答える
0

フレーム内の他のページに移動するときに複数のインスタンスが作成されないように、NavigationCacheModeを使用しました。

public SamplePage()
    {
        this.InitializeComponent();
        this.NavigationCacheMode = global::Windows.UI.Xaml.Navigation.NavigationCacheMode.Required;
    }
于 2014-09-30T05:58:46.153 に答える
-1

フレームナビゲーションを使用している場合は、新しいフレームのロード状態でthis.Frame.BackStack.Removeを実行し、必要な前のページをクリアします。

于 2013-11-20T07:03:29.270 に答える