1

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

例如:page-1 MainMenu

第 2 页的项目列表。

page-3 哪些常用共享选项(Facebook 和 twitter 的)

page-4 点显示列表中获得的最高点。

第 5 页登出。

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

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

我试过

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

但它不会解决我的问题。

谢谢..!!

4

4 回答 4

1

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

于 2012-05-22T12:20:21.140 回答
1

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

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

于 2012-05-22T12:21:24.913 回答
1

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

/// <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());
于 2012-05-22T15:22:13.247 回答
1

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

这是一个SO question,它在一般情况下为您提供了一些选项。要点是使用 for 循环倒退或调用.ToArray()or.ToList()foreach在这些单独的集合上执行您的操作。

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

while (NavigationService.CanGoBack)
{
  NavigationService.RemoveBackEntry();
}
于 2012-05-22T18:00:32.453 回答