在第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
**第1页:**我添加了//
,因为我希望第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 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页开始,我开始堆叠页面,所以回去应该工作
2条答案
按热度按时间pinkon5k1#
或任何人将面临这个问题,并有这个错误消息了;
当您在XAML中注册路由(在appshell文件中),并且还尝试在C#的代码隐藏中注册路由时,会发生这种情况。仅使用XAML或C#注册路由一次,而不要同时使用两者。
在我的例子中,我注册了Page 2两次,我用c#删除了它,它对我很有效
vhmi4jdf2#
用户15900757是对的,但答案不清楚......
我刚花了一天多的时间追踪这个如果我还有头发的话,现在就会全部拔掉。
遇到问题的页面是从真实的存在问题的页面向下导航的两个页面。
在应用程序 shell 导航中,您基本上会拥有顶级,它将被添加到MauiProgram.cs中,如下所示:
(or我猜你也可以选择AddTransient)。
然后将其余页面也添加到此处。
然后在AppShell.xaml中,您将看到顶级菜单路径:
对于子页面,它们将存在于AppShell.xaml.cs文件中,如下所示:
除了AppShell.xaml文件外,我还在AppShell.xaml.cs文件中列出了顶级页面。这导致我在两个页面后出现路由问题。顶级页面没有在上面的错误消息中列出。
我希望这能帮助其他人;这是一个很难解决问题。