【问题标题】:How to remove pagestack into windows phone 7.?如何将pagestack删除到windows phone 7中?
【发布时间】:2012-05-23 02:00:32
【问题描述】:

我有一个包含 5 页的应用程序,最后一页将被称为注销,因此一旦我单击注销,它将删除所有页面堆栈并开始从第 1 页导航。

例如:page-1 MainMenu

第 2 页的项目列表。

page-3 常用分享选项(Facebook 和 twitter 的)

page-4 Point 显示获得最高积分的列表。

第 5 页退出。

单击退出后,它将转到登录页面。并且一旦登录,它将重定向到我的页面-5。

所以我的问题是我想重定向到第 2 页。所以我该怎么做。

我试过了

        foreach (var journalEntry in ((PhoneApplicationFrame)Application.Current.RootVisual).BackStack)
        {
            ((PhoneApplicationFrame)Application.Current.RootVisual).RemoveBackEntry();
        }

但这并不能解决我的问题。

谢谢你..!!

【问题讨论】:

    标签: windows-phone-7


    【解决方案1】:

    您可能有兴趣阅读以下“解决 Windows Phone Silverlight 应用程序中的循环导航”:-

    http://windowsteamblog.com/windows_phone/b/wpdev/archive/2010/12/13/solving-circular-navigation-in-windows-phone-silverlight-applications.aspx

    【讨论】:

      【解决方案2】:

      您可以使用NavigationService.RemoveBackEntry 方法从BackStack 中删除条目

      【讨论】:

      • 谢谢@Rowland Shaw 我正在使用此代码,但问题仍未解决。 foreach (var journalEntry in ((PhoneApplicationFrame)Application.Current.RootVisual).BackStack) { ((PhoneApplicationFrame)Application.Current.RootVisual).RemoveBackEntry();休息; }
      • 你不想删除所有的 backstack 条目 - 只是那些与“登录”状态相关的条目
      • 我很抱歉,但我已经添加到 foreach 循环中,那一次它会给我错误,所以我手动添加了 4 次 foeareach 并暂时中断它。
      【解决方案3】:

      我创建了这个方法来从页面堆栈中删除多个页面(“任务”)。

      /// <summary>
              /// Decreases the back stack entry count, leaving the amount of items on the stack equilivent to the <param name="leaveAmount">leaveAmount</param>.
              /// </summary>
              /// <exception cref="NotSupportedException">A value less than 0 is provided</exception>
              /// <param name="leaveAmount">The leave amount.</param>
              /// <param name="whenFinished"> </param>
              public static void DecreaseBackStackEntryCount(int leaveAmount, Action whenFinished = null)
              {
                  if (leaveAmount < 0)
                  {
                      throw new NotSupportedException("cannot remove every item on stack");
                  }
                  Deployment.Current.Dispatcher.BeginInvoke(() =>
                                                                {
                                                                    try
                                                                    {
                                                                        while (((PhoneApplicationFrame)Application.Current.RootVisual).BackStack.Count() > leaveAmount)
                                                                        {
                                                                            try
                                                                            {
                                                                                ((PhoneApplicationFrame) Application.Current.RootVisual).RemoveBackEntry();
                                                                            }
                                                                            catch (InvalidOperationException)
                                                                            {
                                                                                return;
                                                                            }
                                                                        }
      
                                                                    }
                                                                    catch
                                                                    {
                                                                    }
                                                                    finally
                                                                    {
                                                                        if (whenFinished != null)
                                                                        {
                                                                              whenFinished.Invoke();
                                                                        }
                                                                    }
                                                                });
              }
      

      在第 5 页,您会这样使用它:(我认为您在退出后尝试返回主菜单。如果不是,请阅读方法签名)

      DecreaseBackstackEntryCount(1,() => NavigationService.GoBack());
      

      【讨论】:

        【解决方案4】:

        您的部分问题可能是您正在修改 foreach 循环中的集合,而这不起作用。

        这是一般情况下的SO question that gives you some options。要点是使用向后的 for 循环或调用 .ToArray().ToList() 并在这些单独的集合上执行 foreach

        但是在这种情况下我会做的是:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多