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

时间:2010-10-22 22:38:14

标签: silverlight navigation windows-phone-7

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

执行此操作时,我还要清除导航历史记录,以便无法返回到期望已经过身份验证的页面。

无法看到如何使用NavigationService进行操作,并且想知道是否有办法执行此操作。

5 个答案:

答案 0 :(得分:6)

这里有几点需要注意。首先,我建议您熟悉此处提供的指导。

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

Redirecting an initial navigation - Peter Torr's Blog(此刻抱歉)

如果您能够在本指南中工作,那是最佳途径。处理登录屏幕有具体的建议。

如果您被迫提供主页按钮功能。小心你如何应用它,因为认证者正在敲回应用程序,以便在导航方面采取意想不到的行为。我觉得如果这个功能在主页按钮后面你应该在惊喜部门可以。随着时间的推移,我们将看到这一点。可以说“注销”场景同样适用。

以下是Richard WooMaarten StruysSam Jarawan的三种方法。

答案 1 :(得分:3)

此代码运行良好(它需要在您的页面中),尚未尝试通过认证但代码确实有效:

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

这似乎与documentation不同,logged a bug表示如果没有更多项目会引发异常,因此我对此用户语音{{3}},因此将来可能会发生变化。

答案 2 :(得分:0)

我担心您无法清除堆栈页面,更重要的是,您的应用程序将无法通过认证。 More info

答案 3 :(得分:0)

清除后台堆栈的一种简单方法是执行以下操作

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

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

重要提示,如果您使用网络控件或NAX广告系统,则该密钥将由网页和网络控件使用,因此应用程序将存在而不是返回页面。

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

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

一条简单的路线。尼斯

答案 4 :(得分:0)

您应该为您的网页创建“已加载”事件

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