Windows phone 7 如何将pagestack删除到windows phone 7。?

Windows phone 7 如何将pagestack删除到windows phone 7。?,windows-phone-7,Windows Phone 7,我有一个应用程序,其中包含5页,最后一页结束时将被称为注销,所以一旦我点击注销,它将删除所有的页面堆栈,并开始从第1页导航 例如:第1页主菜单 第2页项目清单 第3页哪些常见共享选项(Facebook和Twitter) 第4页显示最高赢得分数列表的分数 第5页注销 一旦我点击了注销,它将进入登录页面。一旦它登录,它将重定向到我的第5页 所以我的问题是我想重定向到第2页。那么我该怎么做呢 我试过了 但这并不能解决我的问题 谢谢你 您可以使用方法从中删除条目您可以使用方法从中删除条目您可能有兴趣阅读

我有一个应用程序,其中包含5页,最后一页结束时将被称为注销,所以一旦我点击注销,它将删除所有的页面堆栈,并开始从第1页导航

例如:第1页主菜单

第2页项目清单

第3页哪些常见共享选项(Facebook和Twitter)

第4页显示最高赢得分数列表的分数

第5页注销

一旦我点击了注销,它将进入登录页面。一旦它登录,它将重定向到我的第5页

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

我试过了

但这并不能解决我的问题


谢谢你

您可以使用方法从中删除条目

您可以使用方法从中删除条目

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


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


我创建了此方法,用于从页面堆栈中删除多个页面(“任务”)

/// <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();
                                                                  }
                                                              }
                                                          });
        }

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

/// <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();
                                                                  }
                                                              }
                                                          });
        }

问题的一部分可能是您正在
foreach
循环中修改集合,但这行不通

在一般情况下,这是一个简单的例子。要点是使用for循环向后运行,或者调用
.ToArray()
.ToList()
并对这些单独的集合执行
foreach

然而,在这种情况下,我会做的是:

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

问题的一部分可能是您正在
foreach
循环中修改集合,但这行不通

在一般情况下,这是一个简单的例子。要点是使用for循环向后运行,或者调用
.ToArray()
.ToList()
并对这些单独的集合执行
foreach

然而,在这种情况下,我会做的是:

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

谢谢@Rowland Shaw我正在使用此代码,但问题仍未解决。foreach(var journalEntry in((PhoneApplicationFrame)Application.Current.RootVisual).BackStack){((PhoneApplicationFrame)Application.Current.RootVisual).RemoveBackEntry();break;}您不想删除所有BackStack条目,只删除与“登录”相关的条目statesI很抱歉,但我在foreach循环中添加了该代码,这会给我带来错误,所以我已经手动添加了4次foreach并暂时对其进行break。谢谢@Rowland Shaw我正在使用该代码,但问题仍然没有解决。foreach(var journalEntry in((PhoneApplicationFrame)Application.Current.RootVisual).BackStack){((PhoneApplicationFrame)Application.Current.RootVisual).RemoveBackEntry();break;}您不想删除所有BackStack条目,只删除与“登录”相关的条目statesI很抱歉,但我已经添加到foreach循环中,这会给我带来错误,所以我已经手动添加了4次foreach,并暂时对其进行break。
while (NavigationService.CanGoBack)
{
  NavigationService.RemoveBackEntry();
}