6

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

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

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

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

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

4

3 回答 3

11

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

您可以这样做:

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

    布尔删除=真;
    字符串 removeParam = 删除?bool.TrueString : bool.FalseString;

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

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

    布尔删除 = 假;

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

    如果(删除)
    {
        NavigationService.RemoveBackEntry();
    }

这样,您可以决定是否要将CurrentPage.xaml从后台堆栈中删除。

于 2012-06-11T15:01:28.553 回答
1

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

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

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

于 2012-06-11T14:01:02.210 回答
0

听起来您很早就调用了 RemoveBackEntry(当您仍在 CurrentPage.xaml 时)。这就是它删除 MainPage.xaml 的原因。当您导航到 NewPage.xaml 时,在 OnNavigatedTo 事件中调用 NavigationService.RemoveBackEntry,这应该可以解决问题。

于 2012-06-11T13:58:05.893 回答