在Windows Phone 7应用程序中,我获得了一个CurrentPage,在特殊事件中使用NavigationService导航到新页面:
NavigationService.Navigate(new Uri("/NewPage.xaml", UriKind.Relative));
现在,当用户点击NewPage时,我希望应用程序跳过CurrentPage并直接转到应用程序的MainPage。
我尝试使用NavigationService.RemoveBackEntry,但这会删除MainPage而不是CurrentPage。
如何在不将当前信息放在后台堆栈的情况下导航到新页面?
答案 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并且应该解决问题。