如何在Silverlight/Windows Phone 7中清除导航历史记录?

5
我正在制作一个Windows Phone 7应用程序,其中包含登录/注销语义(对Web应用进行身份验证)。当用户注销时,我会导航回登录屏幕并忘记会话认证。
在这样做的同时,我还想清除导航历史记录,以便不能返回到期望他们已经通过身份验证的页面。
无法使用NavigationService完成此操作,想知道是否有一种方法可以实现这一点。
5个回答

6

这里有几件事需要注意。首先,我建议熟悉这里提供的指导。

介绍“地点”概念-Peter Torr的博客

重定向初始导航-Peter Torr的博客(抱歉,目前无法访问)

如果您能够在此指导下工作,那是最好的路径。针对处理登录屏幕的特定建议也很重要。

如果您想提供一个主页按钮功能,请注意如何应用它,因为认证者会拒绝表现出乎意料的导航方式的应用程序。我认为,如果这个功能在主页按钮后面,你在惊喜方面应该没问题。随着认证的时间推移,我们将看到这种情况的变化。同样适用于“注销”场景。

以下是Richard Woo, Maarten Struys, Sam Jarawan提出的三种方法。


谢谢Mick。我期待着那篇文章重新发布时能阅读到它。我在看Windows手机导航规则的内容时,发现很难理解典型的登录和注销场景,尤其是在远程资源身份验证方面。 - dkackman
实际上有两篇帖子,我已经编辑了上面 - 按呈现的顺序阅读。他的博客已经备份了。 - Mick N
1
看起来这个建议最近也被纳入了文档中。http://msdn.microsoft.com/en-us/library/gg278407%28v=VS.92%29.aspx - Mick N
这正是我一直在寻找的方向。非常感谢。 - dkackman

3
这段代码很好用(需要在你的页面中使用),但我还没有尝试通过认证,不过这段代码确实能够工作:
 while (true)
 {
     if (this.RemoveBackEntry() == null)
     {
         break;
     }
  }

这似乎与文档中所说的不同,文档中说当没有更多项时会引发异常,因此我已经在用户声音上记录了一个错误,因此它可能会在未来改变。


0
你应该为你的页面创建一个“Loaded”事件。
    private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
    {
        try { while (NavigationService.RemoveBackEntry() != null) ; }
        catch (System.NullReferenceException ex) { }
    }

0
一个更简单的清除回退栈的方法是执行以下操作:
while (NavigationService.CanGoBack)
{
    NavigationService.RemoveBackEntry();
}

请注意,如果您在onloaded事件中执行此操作,它将在每次导航到页面时触发,并且再次点击返回按钮将关闭应用程序!

重要提示:如果您使用WebControl或NAX广告系统,则后退键也会被页面和Web控件消耗,因此将退出应用程序而不是返回页面。

**更新 还从MS开发中心找到了更简短的版本。

while (NavigationService.RemoveBackEntry() != null);

一行简单的代码。不错


0

很抱歉,您无法清除页面堆栈,而且您的应用程序将无法通过认证。 更多信息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接