导航到新页面而不将当前页面放在后台堆栈上?

时间:2012-06-11 13:45:27

标签: windows-phone-7 navigation

在Windows Phone 7应用程序中,我获得了一个CurrentPage,在特殊事件中使用NavigationService导航到新页面:

NavigationService.Navigate(new Uri("/NewPage.xaml", UriKind.Relative));

现在,当用户点击NewPage时,我希望应用程序跳过CurrentPage并直接转到应用程序的MainPage。

我尝试使用NavigationService.RemoveBackEntry,但这会删除MainPage而不是CurrentPage。

如何在不将当前信息放在后台堆栈的情况下导航到新页面?

3 个答案:

答案 0 :(得分:11)

导航到NewPage.xaml传递参数时,您知道何时从Backstack中删除上一页。

你可以这样做:

CurrentPage.xaml 导航到 NewPage.xaml 传递参数


    bool remove = true;
    String removeParam = remove ? bool.TrueString : bool.FalseString;

    NavigationService.Navigate(new Uri("/NewPage.xaml?removePrevious="+removeParam , UriKind.Relative));

NewPage.xaml OnNavigatedTo 事件中,检查是否删除上一页。


    bool remove = false;

    if (NavigationContext.QueryString.ContainsKey("removePrevious"))
    {
        remove = ((string)NavigationContext.QueryString["removePrevious"]).Equals(bool.TrueString);
        NavigationContext.QueryString.Remove("removePrevious");
    }

    if(remove)
    {
        NavigationService.RemoveBackEntry();
    }

这样,如果要从backstack中删除它,就可以决定 CurrentPage.xaml

答案 1 :(得分:1)

你在哪里调用“NavigationService.RemoveBackEntry()”? 我认为你必须在新页面上进行,而不是在你想跳过的页面上进行!

编辑: 所以为了获得更好的图片:你有主页 - >第一个子页面(应在后面的导航中跳过) - >第二个子页面,与第一个子页面无关。

2个想法: 1)尝试在第一个子页面的OnNavigatedFrom-Event中调用“NavigationService.RemoveBackEntry()” 2)检查第一个子页面的OnNavigatedTo-Event是否为NavigationMode(请参阅事件参数)==返回并再次导航回来。

答案 2 :(得分:0)

这听起来像是你早期调用RemoveBackEntry(当你还在使用CurrentPage.xaml时)。这就是为什么它删除MainPage.xaml。当您导航到NewPage.xaml时,在OnNavigatedTo事件中调用NavigationService.RemoveBackEntry并且应该解决问题。