为什么 .NET MAUI Shell 返回导航失败而不引发错误

问题描述 投票:0回答:1

我正在使用带有选项卡栏和四个选项卡的 shell 导航。每个选项卡都包含一个内容页面。其中一些内容页面导航到其他(例如详细信息)页面,其中一些页面向下移动。导航工作正常,后退按钮返回堆栈。在一页上我添加了第四个级别并且它工作正常。在另一个选项卡上,我添加了第四个级别,但它的后退按钮始终没有任何作用。

为了方便调试,我修改了导航服务方法如下

private Task NavigateTo(string route)
{
    var shell = Shell.Current;
    var count = shell.Navigation.NavigationStack.Count;

    foreach (Page page in shell.Navigation.NavigationStack)
    {
        if (page is not null)
        {
            Console.WriteLine(page.Title);
        }
    }

    Console.WriteLine($"Navigating to page: {route}");

    return Shell.Current.GoToAsync(route);
}

在第四层使用后退按钮时,路由为“..”,计数为 3,并且前两个页面列在控制台输出中 - 因此存在导航堆栈。

为什么“..”请求在没有引发错误/异常的情况下什么都不做?

navigation .net-maui.shell
1个回答
0
投票

解决方案

在 IOS 上运行,而不是在 MacCatalyst 上运行,出现了一个“System.ArgumentException: Ambiguous routes matched for”异常。通过进一步的研究和实验,问题是应用程序外壳页面上的重复/模棱两可的路由。

在 AppShell.xaml 中,我将以下内容作为选项卡栏定义的一部分:

        <Tab Title="Journals">
            <Tab.Icon>
                <FontImageSource 
                    FontFamily="MaterialIcons" 
                    Glyph="{x:Static constants:MaterialIcon.Ledger}" 
                    Size="Medium"/>
            </Tab.Icon>
            <ShellContent Route="JournalsView" ContentTemplate="{DataTemplate views:JournalsView}" />
        </Tab>

然后在 AppShell.xaml.cs 中我也注册了“JournalsView”,如下所示:

Routing.RegisterRoute(nameof(JournalsView), typeof(JournalsView));

注释掉后者,并注册标签栏中定义的所有其他路由,修复了后退导航——即使这些页面没有直接涉及错误发生的地方。

© www.soinside.com 2019 - 2024. All rights reserved.