2010-10-22 148 views
5

我正在制作一个Windows Phone 7应用程序,它具有登录/注销语义(对Web应用程序进行身份验证)。当用户注销时,我回到登录屏幕并忘记会话身份验证。如何在Silverlight/Windows Phone 7中清除导航历史记录?

这样做时,我还想清除导航历史记录,以便无法返回到期望它们已经通过身份验证的页面。

看不到如何做到这一点NavigationService,我想知道是否有办法做到这一点。

回答

6

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

Introducing the concept of “Places” - Peter Torr's Blog

Redirecting an initial navigation - Peter Torr's Blog(向下的那一刻不好意思)

如果你能这样指导这是最好的路径内工作。有处理登录屏幕的具体建议。如果您不得不提供主页按钮功能,要小心你如何应用这一点,因为验证者正在将应用程序敲回去,以便在导航方面以意想不到的方式行事。我觉得如果这个功能在主页按钮后面,你应该在惊喜部门确定。随着时间的推移,我们将看到认证。可以说,“注销”方案同样适用。

这里有三种方法,从Richard Woo,Maarten Struys,Sam Jarawan

+0

感谢米克“装”事件。我期待在它回来后阅读这篇文章。我很难看到登录和注销这种非常典型的情况,特别是在对远程资源进行身份验证时,它符合我一直在阅读的有关Windows Phone导航规则的内容。 – dkackman 2010-10-23 04:42:05

+0

实际上有两个职位,我上面编辑 - 阅读顺序。他的博客备份顺便说一句。 – 2010-10-23 05:33:26

+1

看起来这个建议也是最近进入文档的方式。 http://msdn.microsoft.com/en-us/library/gg278407%28v=VS.92%29.aspx – 2010-10-23 05:46:34

0

恐怕您无法清除堆叠的页面,更重要的是,您的应用无法通过认证。 More info

3

此代码工作得很好(它需要在你的页面),还没有尝试过把它过去的认证还没有,但是代码没有问题:

while (true) 
{ 
    if (this.RemoveBackEntry() == null) 
    { 
     break; 
    } 
    } 

这似乎与documentation不同,其中说,如果没有更多项目,则会发生异常,因此我在用户语音上输入logged a bug,因此未来可能会更改。

0

更简单的方法只是清除返回堆栈是做到以下几点

while (NavigationService.CanGoBack) 
{ 
    NavigationService.RemoveBackEntry(); 
} 

注意的是,如果你这样做在装载的情况下,将火每次页面导航到并再次单击后面会关闭应用程序!

重要提示:如果您使用webcontrol或NAX广告系统,该页面以及网页控件都会占用该backkey,因此将存在应用程序而不是返回到页面。

**更新 也只是找到了一个更短的手版从MS开发中心

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

一个简单的线条。尼斯

0

你应该为你的页面

private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) 
    { 
     try { while (NavigationService.RemoveBackEntry() != null) ; } 
     catch (System.NullReferenceException ex) { } 
    }