代码之家  ›  专栏  ›  技术社区  ›  dkackman Srinivas Kokkula

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

  •  5
  • dkackman Srinivas Kokkula  · 技术社区  · 15 年前

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

    在这样做的时候,我还想清除导航历史记录,这样就不能返回到期望它们已经过身份验证的页面。

    不知道该怎么做 NavigationService 我想知道是否有办法做到这一点。

    5 回复  |  直到 12 年前
        1
  •  6
  •   Mick N    15 年前

    这里有一些东西要看。首先,我建议您熟悉这里提供的指导。

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

    Redirecting an initial navigation - Peter Torr's Blog (现在下来对不起)

    如果你能在这个指导下工作,那就是最好的途径。对于处理登录屏幕有特定的建议。

    如果您必须提供一个主按钮功能。注意如何应用这一点,因为认证者正在回击应用程序,因为它们在导航方面的行为出乎意料。我觉得如果这个功能是在一个家按钮后面,你应该是在惊喜部门。随着时间的推移,我们将看到这一点。可以说,“注销”场景同样适用。

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

        2
  •  3
  •   Robert MacLean    13 年前

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

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

    这似乎与 documentation ,这表示当没有其他项时将引发异常 logged a bug 关于用户的声音,所以以后可能会改变。

        3
  •  0
  •   Lukasz Madon    15 年前

    恐怕你不能清除这一叠的页面,而且,你的应用程序将无法通过认证。 More info

        4
  •  0
  •   Darkside    12 年前

    一个简单的方法就是清除backback

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

    但请注意,如果在加载的事件中执行此操作,则每次导航到页面时都会触发此操作,再次单击“上一步”将关闭应用程序!

    重要的是,如果使用WebControl或NAX广告系统,backkey会被页面和Web控件使用,因此会存在应用程序而不是返回页面。

    **更新 还从微软开发中心找到了一个更短的版本

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

    一条简单的线。尼斯

        5
  •  0
  •   Sorokin Andrey    12 年前

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

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