如何从Frame的历史记录中删除页面?

Joe*_*ite 3 frame windows-runtime winrt-xaml

如何在WinRT XAML应用程序中操作Frame的历史记录?

用户将从我的集线器页面开始,在那里他们可以选择现有项目进入其编辑屏幕,或者他们可以选择"新项目"."新项目"将通过一个简短的向导,然后将它们带到"编辑项目"屏幕.

向导页面只是我在框架中导航到的页面是有意义的; 这样,如果用户改变主意,用户就可以退出向导.(它只有两页,所以"后退"可以代替"取消".)但是一旦完成向导并且提交了更改,这些向导页面就不再有任何理由存在于历史中; 如果用户从"编辑项目"页面单击"返回",我希望它们直接返回到集线器.

为了说明,我希望流程看起来像这样:

  • 帧历史:Hub.用户单击"新建项目".
  • 帧历史:集线器 - >向导页面1. 用户单击"下一步".
  • 帧历史:集线器 - >向导页面1 - >向导页面2. 用户单击"完成".
  • 帧历史记录:Hub - > Edit Project.

框架似乎没有任何方法沿着"从历史中删除".文档确实提示可能有某种方法来覆盖历史记录,因为GoBack的文档说"导航到后面导航历史记录中的最新项目,如果框架管理自己的导航历史记录 "(强调我的),但那是所有这一切都要谈到这个主题 - 没有提到其他人如何管理它的历史.所以我不知道这是否有用.

用户完成向导后,如何从Frame的历史记录中删除向导页面?

Mar*_*l W 6

您可以通过在框架上调用SetNavigationState(string navigationState)来从历史记录中删除页面.不幸的是,序列化navigationState的格式是"仅供内部使用",因此仅更改字符串可能会在将来的版本中破坏您的代码.

我只能想到一个完全清除导航堆栈的未来验证方法:

  1. 在程序启动时,通过调用GetNavigationState保存空导航状态.
  2. 在为"编辑项目"页面调用"导航"之前,请使用空导航状态调用SetNavigationState.

您的"编辑项目"页面现在将成为堆栈中的第一页.