Xamarin.Forms Shell 带参数的导航层次结构

Xamarin.Forms Shell Navigation Hierarchy with parameters

如何在 Xamarin.Forms Shell 应用程序中定义以下导航层次结构?

只要只有 order 页面而没有定义子详细信息页面,它就可以正常工作。然后我可以通过 Shell.Current.GoToAsync("//main/orders/order?orderId=5") 路线导航到该页面。

但是当我添加子详细信息页面时(通过 XAML 或 Routing.RegisterRoute 执行此操作无关紧要),相同的 GoToAsync 调用失败并显示 System.ArgumentException: 'unable to figure out route for: //main/orders/order?orderId=5'

层级定义通过XAML:

<Tab Title="My Orders" Route="main">
    <ShellContent ContentTemplate="{DataTemplate pages:OrdersListPage}" Route="orders">
        <ShellContent ContentTemplate="{DataTemplate pages:OrderPage}" Route="order">
            <ShellContent ContentTemplate="{DataTemplate pages:OrderDetailPage1}" Route="details1" />
            <ShellContent ContentTemplate="{DataTemplate pages:OrderDetailPage2}" Route="details2" />
        </ShellContent>
    </ShellContent>
</Tab>

当我通过自定义路由定义它时出现同样的异常:

Routing.RegisterRoute("main/orders/order", typeof(pages:OrderPage));
Routing.RegisterRoute("main/orders/order/details1", typeof(pages:OrderDetailPage1));
Routing.RegisterRoute("main/orders/order/details1", typeof(pages:OrderDetailPage1));

我有一个解决方法,您可以 RegisterRoute thirdfourth 级别 Route 再次在 AppShell.xaml.cs.

如下:

Routing.RegisterRoute("Order", typeof(OrderPage));
Routing.RegisterRoute("Details1", typeof(OrderDetailPage1));

然后可以使用follow route路径导航:

Shell.Current.GoToAsync("//main/orders/Order/Details1?orderId=5")

如果您在 .cs 代码中为每个页面注册路由,它将起作用。一般第一层和第二层定义在Xaml中,似乎不需要再在代码中re-register。所以,我只re-register第三个和第四个Route配了一个name-key,没有一个path-key。