如何在WinRT XAML应用程序中操作Frame的历史记录?
用户将从我的中心页面开始,在那里他们可以选择现有项目进入其编辑屏幕,或者他们可以选择“新项目”。 “新项目”将通过一个简短的向导,然后将它们带到“编辑项目”屏幕。
向导页面只是我在框架中导航到的页面是有意义的;这样,如果用户改变主意,用户就可以退出向导。 (它只有两页,所以“后退”可以代替“取消”。)但是一旦完成向导并且提交了更改,这些向导页面就不再有任何理由存在于历史中;如果用户从“编辑项目”页面单击“返回”,我希望他们直接返回集线器。
为了说明,我希望流程看起来像这样:
Frame似乎没有任何类似“从历史中删除”的方法。文档确实提示可能有某种方法来覆盖历史记录,因为GoBack的文档说“导航到后面导航历史记录中的最新项目,如果框架管理自己的导航历史记录< / em>“(强调我的),但这就是关于这个话题的全部内容 - 没有提到其他人如何管理它的历史。所以我不知道这是否有用。
用户完成向导后,如何从Frame的历史记录中删除向导页面?
答案 0 :(得分:6)
您可以通过在框架上调用SetNavigationState(string navigationState)来从历史记录中删除页面。不幸的是,序列化navigationState的格式是“仅供内部使用”,因此只是更改字符串可能会在将来的版本中破坏您的代码。
我只能想到将来 完全清除 导航堆栈的未来验证方法:
您的“编辑项目”页面现在将成为堆栈中的第一页。
答案 1 :(得分:1)
从Windows 8.1开始,您可以访问Frame的BackStack属性。您可以轻松删除一些内容或清除整个后台。
以下是我使用清除后栈的原因:
var rootFrame = (Window.Current.Content as Frame);
rootFrame.Navigate(typeof(MyPage));
rootFrame.BackStack.Clear();
答案 2 :(得分:0)
它是我的解决方案:
while (ContentFrame.BackStack.Count > 1)
{
ContentFrame.BackStack.Remove(ContentFrame.BackStack.ElementAt(ContentFrame.BackStack.Count-1));
}