Xamarin Shell 引发模糊路由匹配异常
Posted
技术标签:
【中文标题】Xamarin Shell 引发模糊路由匹配异常【英文标题】:Xamarin Shell Raise Ambiguous Routes matched Exception 【发布时间】:2019-10-12 09:53:59 【问题描述】:在 Xamari.Forms 中,我在 AppShell.xaml 中使用以下路由声明:
<FlyoutItem Title = "Toolbox"
FlyoutDisplayOptions="AsMultipleItems"
Route="Main">
<ShellContent Title = "Toolbox"
ContentTemplate="DataTemplate Views:Toolbox"
Route="Toolbox"/>
</FlyoutItem>
<ShellContent Title = "Parameters"
ContentTemplate="DataTemplate Views:Parameters"
Route="Parameters"/>
在 AppShell.xaml.cs 中,我以编程方式为 Toolbox 页面添加了上下文页面导航:
public AppShell ()
InitializeComponent ();
Routing.RegisterRoute("Toolbox/TBOuvriers", typeof(TBOuvriers));
BindingContext = this;
当我尝试从工具箱页面显示上下文页面导航时:await Shell.Current.GoToAsync("//Main/Toolbox/TBOuvriers");
我得到了这个异常:
System.ArgumentException:不明确的路线匹配://Main/Toolbox/TBOuvriers 找到匹配项: //主/工具箱/TBOuvriers/TBOuvriers, //Main/IMPL_Toolbox/Toolbox/TBOuvriers 参数名称:uri
就在调用之前,我可以看到 Shell 变量的值:Shell.Current.CurrentItem : "Title = Toolbox, Route = Main" Shell.Current.CurrentState.Location : "//Main/Toolbox"
这似乎是预期的。
如果我尝试使用此调用显示页面:await Shell.Current.GoToAsync("TBOuvriers"); 我也得到一个异常:System.Exception: Timeout exceeded getting exception details
那么,问题出在哪里? 这些路线来自哪里?!? 为什么工具箱页面被注册了2次?
欢迎所有想法!
最好的问候
【问题讨论】:
进一步查看网络上的文章,我发现人们主要将新页面(如上下文页面)声明为全局,但它们没有出现在 fyout 菜单中。如果我这样做,它对我有用。像在 xamarin shell 文档中一样将它们声明为现有页面的子页面(如在我的主题中)有问题吗? 同样的观察:在 Xanimals 演示项目中,他们使用"Routing.RegisterRoute("monkeydetails", typeof(MonkeyDetailPage));"
而不是 "Routing.RegisterRoute("monkey/details", typeof(MonkeyDetailPage));"
为什么?调用 "await Shell.Current.GoToAsync("details") 应该更容易;" 来自每个动物页面,而不是 "await Shell.Current.GoToAsync($"state.Location/destinationRoute?name=animalName");"跨度>
,你可以在你的项目中尝试这种方式,这里有什么问题吗?
我做的和 XAnimals 一样。我所有的独立页面都在根目录中注册。但我无法成功应用他们在官方文档中提出的方式。所以,对我有用,但也许不是最好的方法。
如果你有更好的方法解决这个问题,请在这里分享,谢谢。
【参考方案1】:
对于将面临此问题并且也有此错误消息的任何人;
System.ArgumentException: '不明确的路由匹配:...'
当您在 XAML 中(在 appshell 文件中)注册您的路由并且您还尝试在 C# 中的代码中注册您的路由时,会发生这种情况。 仅使用 XAML 或 C# 注册一次您的路由,而不是同时使用两者。
【讨论】:
以上是关于Xamarin Shell 引发模糊路由匹配异常的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin Forms MonoTouchException:调用 Geolocator.GetPositionAsync 时引发 Objective-C 异常
hockeyapp 在 xamarin.forms 应用程序中的 UWP 上引发异常
应用启动时出错:Foundation.MonoTouchException:引发了 Objective-C 异常(Xamarin iOS)
Xamarin.Forms Shell 如何在路由导航中向字符串注入多个不同的值