【发布时间】:2021-05-22 19:36:31
【问题描述】:
在第 3 页上,通过按内置返回按钮,它会返回到第 2 页。到目前为止一切顺利
但是,在第 4 页,通过按内置返回按钮,它不会返回到第 3 页。为什么不呢?
这里是日志:根据日志,问题在第 3 页
[0:] Shell: Failed to Navigate Back:
System.ArgumentException:
Ambiguous routes matched for: //D_FAULT_FlyoutItem7/IMPL_MyWalletPage/MyWalletPage/Page3 matches found:
//D_FAULT_FlyoutItem7/IMPL_MyWalletPage/MyWalletPage/Page3,//D_FAULT_FlyoutItem7/IMPL_MyWalletPage/MyWalletPage/Page3
Parameter name: uri
at Xamarin.Forms.ShellUriHandler.GetNavigationRequest (Xamarin.Forms.Shell shell, System.Uri uri, System.Boolean enableRelativeShellRoutes, System.Boolean throwNavigationErrorAsException, Xamarin.Forms.ShellNavigationParameters shellNavigationParameters) [0x000aa] in D:\a\1\s\Xamarin.Forms.Core\Shell\ShellUriHandler.cs:207
at Xamarin.Forms.ShellNavigationManager.GoToAsync (Xamarin.Forms.ShellNavigationParameters shellNavigationParameters) [0x000b8] in D:\a\1\s\Xamarin.Forms.Core\Shell\ShellNavigationManager.cs:44
at Xamarin.Forms.ShellSection+NavigationImpl.OnPopAsync (System.Boolean animated) [0x000e9] in D:\a\1\s\Xamarin.Forms.Core\Shell\ShellSection.cs:1070
at Xamarin.Forms.Platform.Android.ShellToolbarTracker.OnNavigateBack () [0x0002a] in D:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\ShellToolbarTracker.cs:207
Page#1:我添加了//因为我想在Page#2 中添加ShellApp 内置菜单,而不是返回按钮
async Task OnKeypadSubmitTapCommand()
{
var route = $"//{ nameof(Page2)}";
await Shell.Current.GoToAsync(route);
}
第 2 页: Shell.Current.CurrentState.Location 这里是 \\Page2
private async void Button_Clicked(object sender, EventArgs e)
{
var route = $"{ nameof(Page3)}";
await Shell.Current.GoToAsync(route);
}
第 3 页: Shell.Current.CurrentState.Location 这里是 \\Page2
private async void Button_Clicked(object sender, EventArgs e)
{
var route = $"{ nameof(Page4)}";
await Shell.Current.GoToAsync(route);
}
第 4 页: Shell.Current.CurrentState.Location 这里是 \\Page2\Page3
private async void Button_Clicked(object sender, EventArgs e)
{
...
}
注册路线
Routing.RegisterRoute(nameof(Page0), typeof(Page0));
Routing.RegisterRoute(nameof(Page1), typeof(Page1));
Routing.RegisterRoute(nameof(Page2), typeof(Page2));
Routing.RegisterRoute(nameof(Page3), typeof(Page3));
Routing.RegisterRoute(nameof(Page4), typeof(Page4));
FlyoutItem
<FlyoutItem Title="Splash Screen" Icon="icon_about.png" FlyoutItemIsVisible="false">
<ShellContent Route="Page0" ContentTemplate="{DataTemplate local:Page0}" />
</FlyoutItem>
<FlyoutItem Title="HomePage" Icon="icon_about.png">
<ShellContent Route="Page2" ContentTemplate="{DataTemplate local:Page2}" />
</FlyoutItem>
文件夹
>Folder1
>Page#1
>Folder2
>Page#3
>Page#4
>Page#2
我在谷歌上查看但没有解决方案。我知道 GoToAsync 的工作原理是将页面堆叠在顶部并弹出它。在我上面的代码中,从第 2 页开始,我开始堆叠页面,所以回去应该可以工作
【问题讨论】:
-
“GoToAsync 的工作原理是将页面堆叠在顶部并弹出它” - 在旧式导航中总是如此。但是当使用
Routing时,它(有时)是不同的。 docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/… 中的关键语句是“当从 Shell 视觉层次结构导航到路由时,不会创建导航堆栈。”。我自己没有使用过路由;不确定是否有一个很好的教程可以准确地展示什么时候会发生什么。
标签: c# android xamarin xamarin.forms xamarin.android