2012-12-26 12 views
7

ページ間を移動する際に、前後に移動する機能や「ホーム」ページがあることがわかります。しかし、私が必要とするのは、戻ることができるようにすることですが、ユーザーはもうアクセスできないはずのページを飛ばします。 http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/3819f389-3bfc-4c59-a919-272927fc9229Windows 8のナビゲーションスタックからポップページを読み込むApp

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

は、私は、このWinRT - How to ignore or delete page from navigation historyを発見し、ページがLayoutAwarePage.cs(Visual Studioのことで生成されたすべての画面から継承したクラスは、)私は追加で

飛ばしされることになっていた場合、私は設定できブール値が含まれると考えていましたprotected bool CanGoBackToThisPage { get; set; }このページにアクセスしたくない場合に設定することができますが、現在のページで何かをやり遂げるまでページを再度閲覧できるようにしたいと思っていることがあります。私はあなたがpreviousFrame.CanGoBackToThisPage = trueのような何かをすることができるとは思わない。また、あなたがアクセスできるオブジェクトは、実際のページオブジェクトにアクセスすることはできませんが、代わりにいくつかのサマリーオブジェクトがあり、このブール値をそのサマリーオブジェクトにどうやって取得するのか分かりません。

ナビゲーションスタックから以前/現在のページを削除する簡単な方法を知っている人はいますか?これは本当に一般的な問題であるように思えるので、私はマイクロソフトがそれをやるための何らかの方法を与えていないと考えるのに苦労しています。私は、質問を投稿する前にそれを考えていなかった理由を

+1

手動でナビゲーション履歴を編集しようとすると悪い考えです。 1つ前にナビゲートして、後ろをナビゲートし続ける必要があるかどうかを確認してください。 – mydogisbox

答えて

5

[OK]を

おかげで、私は知りません。多分私はちょうど疲れているでしょう。私は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); 

私はちょうどFrame.GoBack()二回、その後と呼ばれるが、私はに行きたいページに移動しました

+0

ナビゲーションはアニメーションに気づかないほど速いですが、loadstateイベントがトリガーされます(したがってロジックが実行されます)。 – Bart

+0

常に2つのレベルが上がっていることが分かっている場合は、GoBack()への呼び出しをスキップして、ロード状態メソッドでナビゲートするページに次のコードを追加することができます: "if(Frame.BackStack。 Any()){Frame.BackStack.Clear();} " –

-1

フレームナビゲーションを使用している場合は、このフレームを実行します。フレーム.BackStack.新しいフレームのロード状態を解除し、以前のページを削除します。

3
Frame.BackStack.RemoveAt(Frame.BackStack.Count - 1); 

私は彼の答えは助けたので、それは非常に完全ではなかったものの、gvmaniする小道具を与える必要がありますが。

これにより、loadstateイベントが発生して上記の問題が回避され、より洗練されたソリューションになります。

2

は、私は同じ問題に遭遇したと後に離れて移動BackStackから現在のページを削除することによって、これを解決してきた:私は移動しながら、フレーム内の他のページに作成された複数のインスタンスを避けるためにNavigationCacheModeを使用している

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); 
} 
0

public SamplePage() 
    { 
     this.InitializeComponent(); 
     this.NavigationCacheMode = global::Windows.UI.Xaml.Navigation.NavigationCacheMode.Required; 
    }