0

我正在为我的应用编辑导航。目前页面的堆栈跟踪将是 3 层深,这是非常基本的:

主页 > 选择视图 > 添加新项目

从“添加新项目”页面我有一个取消按钮,我想导航到主页。我目前有连接到 App.xaml.cs 的信使,在那里我收听消息,并将尝试使用代码导航回两次:

for (int i = 0; i <= navigationMessage.BackKeyTimes; i++)
{
    if (RootFrame.CanGoBack)
    {
        RootFrame.GoBack();
    }
}

但是,无论我循环多少次,我都只能导航到上一个“选择视图”页面。Microsoft 是否对您可以返回的页面数量设置了一些限制?

4

1 回答 1

0

正如该方法的名称RootFrame.GoBack();已经说明的那样,它只能用于在导​​航堆栈上导航一页。

您可以在这里执行以下操作:

private void Cancel()
{
    // Delete "Selection View" from the navigation stack
    NavigationService.RemoveBackEntry();

    // Navigate back to the MainPage
    NavigationService.Navigate(new Uri("/MainPage.xaml?clear=true", UriKind.Relative));
}

在主页上,您现在可以查询 OnNavigatedTo 方法中的clear参数。如果它是真的再次调用NavigationService.RemoveBackEntry();从堆栈中删除“添加新项目”页面(您从中导航):

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);            
    string clearParam;

    if (NavigationContext.QueryString.TryGetValue("clear", out clearParam))
    {
        if (Convert.ToBoolean(clearParam))
        {
            // Delete "Add New Item" from the navigation stack
            NavigationService.RemoveBackEntry();
        }
    }
}

通过从导航堆栈中删除页面,您在返回 MainPage 时无法通过 Back Button 导航回任何其他视图。这是你需要的吗?

请告诉我,这是否对您有用。祝你好运!

于 2013-10-14T11:14:49.127 回答