我正在为iOS和Android构建一个Xamarin Forms应用程序. 我在全球AppShell.xaml.cs中注册了我的路由,如下所示:

**-AppShell.xaml.cs-**
Routes.Add(nameof(HousingFolderPage), typeof(HousingFolderPage));
Routes.Add(nameof(HousingFolderDetailsPage), typeof(HousingFolderDetailsPage));

在我的选项卡栏中,我有一个标签"MoreServicePage",它显示了一个项目列表.到目前一切尚好.

**-MoreServicePage.cs-**
private async void ListView_ItemTapped(object sender, ItemTappedEventArgs e)
{
    await Shell.Current.GoToAsync($"HousingFolderPage");
}

现在,当HousingFolderPage显示时,从这里导航回来没有问题.HousingFolderPage也显示了另一个列表,但当我推到下一页时,我无法返回.

**-HousingFolderPage.xaml.cs-**
private async void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
    await Shell.Current.GoToAsync("HousingFolderDetailsPage");
}

错误消息:

[0:]shell 程序:无法导航回:系统.参数异常:匹配的路由不明确:找到的//D_FAULT_TabBar2/IMPL_MoreServicePage/MoreServicePage/HousingFolderPage匹配项://D_FAULT_TabBar2/IMPL_MoreServicePage/MoreServicePage/HousingFolderPage,//D_FAULT_TabBar2/IMPL_MoreServicePage/MoreServicePage/HousingFolderPage 参数名称:URI

我只是编程地在AppShell(AppShell.xaml.cs)中注册了路由,没有其他地方,甚至没有在AppShell.xaml中注册.

PS. this seems to happen everywhere where I navigate 2 pages deep, while 1 page deep works without a problem

我已经创建了一个简单的Xamarin Forms应用程序来重现这个问题.正如您将看到的,您可以从第2页返回,但不能从第3页导航到第4页,也不能从第4页导航到第3页.

Download test repo

推荐答案

关于GotoAsync build in back button does not go back to previous page, when working with 3 or more pages,也有类似的问题.

这个问题的原因是您在XAML和AppShell.cs中注册了第一个页面.

我已经测试了您在GitHub上发布的回购样本.当我删除了<ShellContent Route="Page1" ContentTemplate="{DataTemplate local:Page1}" />中的Route="Page1"的时候.导航系统运行良好.

因此,您可以判断是否在AppShell.xams和AppShell.xaml.cs中都注册了任何页面的路径.

.net相关问答推荐

Powershell机器令牌组

CustomControl 计算自己的宽度和高度 - 使用 bounds.Height=0 调用 ArrangeOverride

StreamWriter.Flush() 和 StreamWriter.Close() 有什么区别?

如何在 MSBuild 脚本中获取当前目录?

在 WinForms 应用程序中查找焦点控件的首选方法是什么?

C# 的部分类是糟糕的设计吗?

一种消耗(所有字节)BinaryReader 的优雅方式?

为什么 C# 多维数组不实现 IEnumerable

你如何调试 MVC 4 API 路由?

清除 .NET 的 StringBuilder 内容的最佳方法

如何将时间设置为当天的午夜?

VB.NET 与 C# 整数除法

我不了解应用程序域

何时使用抽象类?

为什么有些对象属性是 UnaryExpression 而有些是 MemberExpression?

Linq to SQL - 返回前 n 行

例外:不支持 URI 格式

使用 C# vs F# 或 F# vs C# 有什么好处?

当它被抛出和捕获时,不要在那个异常处停止调试器

如何使用匿名方法返回值?