3

WinRT XAMLアプリでフレームの履歴を操作するにはどうすればよいですか?

ユーザーは私のハブページから始めます。そこでは、既存のプロジェクトを選択して編集画面に移動するか、「新しいプロジェクト」を選択できます。「新しいプロジェクト」では、短いウィザードを実行してから、「プロジェクトの編集」画面に移動します。

ウィザードのページが、フレーム内で移動するページであるのは理にかなっています。そうすれば、ユーザーは気が変わった場合にウィザードから戻ることができます。(2ページしかないため、「キャンセル」の代わりに「戻る」を使用できます。)ただし、ウィザードが完了して変更がコミットされると、それらのウィザードページが履歴に含まれる理由はなくなります。ユーザーが[プロジェクトの編集]ページから[戻る]をクリックした場合は、ハブに戻ってもらいたいと思います。

説明のために、フローを次のように表示します。

  • フレーム履歴:ハブ。ユーザーが「新規プロジェクト」をクリックします。
  • フレーム履歴:ハブ->ウィザードページ1.ユーザーが[次へ]をクリックします。
  • フレーム履歴:ハブ->ウィザードページ1->ウィザードページ2。ユーザーは[完了]をクリックします。
  • フレーム履歴:ハブ->プロジェクトの編集。

フレームには、「履歴から削除」に沿ったメソッドがないようです。GoBackのドキュメントには、「フレームが独自のナビゲーション履歴を管理している場合、バックナビゲーション履歴の最新のアイテムに移動する」と書かれているため、ドキュメントには履歴を上書きする方法があるかもしれないというヒントがありますが、それはトピックについて言わなければならないことはすべて、他の誰かがその履歴を管理する方法については言及されていません。だから、それが役に立つかどうかはわかりません。

ユーザーがウィザードを完了したら、フレームの履歴からウィザードページを削除するにはどうすればよいですか?

4

3 に答える 3

6

フレームでSetNavigationState(string NavigationState)を呼び出すことにより、履歴からページを削除できます。残念ながら、シリアル化されたnavigationStateの形式は「内部使用のみ」であるため、文字列を変更するだけで、将来のバージョンでコードが破損する可能性があります。

ナビゲーションスタックを完全にクリアするための将来の証明方法を考えることしかできません。

  1. プログラムの起動時に、GetNavigationStateを呼び出して、空のナビゲーション状態を保存します。
  2. [プロジェクトの編集]ページでNavigateを呼び出す前に、空のナビゲーション状態でSetNavigationStateを呼び出します。

これで、プロジェクトの編集ページがスタックの最初のページになります。

于 2012-10-09T11:11:08.140 に答える
1

Windows 8.1以降では、フレームのBackStackプロパティにアクセスできます。一部のコンテンツを簡単に削除したり、バックスタック全体をクリアしたりできます。

これが私がクリアバックスタックを使用しているものです:

var rootFrame   = (Window.Current.Content as Frame);
rootFrame.Navigate(typeof(MyPage));
rootFrame.BackStack.Clear();
于 2015-03-23T14:34:44.180 に答える
0

それは私にとっての解決策です:

while (ContentFrame.BackStack.Count > 1)
            {
              ContentFrame.BackStack.Remove(ContentFrame.BackStack.ElementAt(ContentFrame.BackStack.Count-1));

            }
于 2016-04-24T20:54:01.773 に答える