2012-06-11 56 views
6

在Windows Phone 7的应用程序,我得到了一个当前页,其中,在一个特殊的事件不使用导航到新页面的NavigationService:导航到新页面而不将当前页面放回栈上?

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

现在,当用户点击后面的NewPage公司我想要的应用跳过CurrentPage并直接进入应用程序的MainPage。

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

如何导航到新页面而不将电流置于背面堆叠上?

回答

11

导航到NewPage.xaml时,沿参数传递,以便知道何时从后台堆栈中删除前一页。

你可以这样做,因为这样的:

当从导航CurrentPage.xamlNewPage.xaml通沿参数

 

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

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

NewPage公司的的OnNavigatedTo事件.xaml,检查是否删除前一页。

 

    bool remove = false; 

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

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

这样一来,你可以,如果你想从堆栈中删除它在CurrentPage.xaml决定。

+0

现在我们如何在Windows应用商店应用上做到这一点?看到我们似乎没有'RemoveBackEntry()'? – GONeale

+0

我还没有看到,我所知道的是,这对WP7有效。如果我碰巧遇到了答案,我会在这里发布。 – akalucas

0

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

+0

我必须在CurrentPage上调用它,因为NewPage不知道它需要删除后端堆栈。 – Sam

+0

@Sam查看akalucas的回答。这就是我在OnNavigatedTo事件中调用它的想法。你也可以告诉你是否来自CurrentPage.xaml或不是。 – loyalpenguin

1

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

编辑: 因此,要获得更好的图像:你有主页 - > 1首页子页面(应该在后导航时跳过) - >从第一个子页面独立的第二子页面。

2想法: 1)尝试在 2 1RST子页面的OnNavigatedFrom-事件称之为“NavigationService.RemoveBackEntry()”)检查的OnNavigatedTo-事件的1RST子页面,如果NavigationMode(见事件args)==返回并再次导航回来。

+0

我必须在CurrentPage上调用它,因为NewPage不知道它需要删除后端堆栈。 – Sam

+0

编辑我的答案 –

相关问题