Shell从多个其他页面导航到同一页面

li9yvcax  于 2023-03-30  发布在  Shell
关注(0)|答案(1)|浏览(134)

在我的.net maui应用程序中,我有一个名为“AboutHelp”的帮助页面,我想从更多其他页面导航到该页面。如何做到这一点?我的问题是,当我从主页“MainPage”以外的页面导航到AboutHelp页面时,后退箭头按钮不起作用。
如果我使用以下命令导航到名为“控制面板”的页面

[RelayCommand]
public async Task ControlsButton_Clicked()
{
    var prams = new Dictionary<string, object>
    {
        {
            "BtnSaveAllRawTxtAsIsEnbled"
            ,
            BtnSaveAllRawTxtAsIsEnbled
        },
        {
            "ButtonSaveAllTextAsIsEnabled"
            ,
            ButtonSaveAllTextAsIsEnabled
        },
        {
            "ButtonClearIsEnabled"
            ,
            ButtonClearIsEnabled
        },
        {
            "ButtonIDoIsEnabled"
            ,
            ButtonIDoIsEnabled
        },
        {
            "FormulaHolderIsEnabled"
            ,
            FormulaHolderIsEnabled
        }
    };

    await Shell.Current.GoToAsync
        (
            nameof(ControlPanel)
            , true
            , prams
        );
}

然后使用以下命令导航到AboutHelp页

[RelayCommand]
public void HelpClicked()
{
    _ = Shell.Current.GoToAsync($"//{nameof(ControlPanel)}/{nameof(AboutHelp)}", true);
}

返回箭头按钮从AboutHelp页面返回到ControlPanel页面,但ControlPanel页面上方没有返回箭头按钮。
我的AppShell.xaml.cs看起来像这样:

namespace PdfCalculator;

public partial class AppShell : Shell
{
    public AppShell()
    {
        InitializeComponent();

        Routing.RegisterRoute(nameof(MainPage), typeof(MainPage));
        Routing.RegisterRoute(nameof(ControlPanel), typeof(ControlPanel));
        Routing.RegisterRoute(nameof(AboutHelp), typeof(AboutHelp));
        Routing.RegisterRoute(nameof(LineChartView), typeof(LineChartView));
    }
}

从主页导航到控制面板,再导航到AboutHelp
将期望返回箭头按钮(工作)的所有网页。

relj7zay

relj7zay1#

我在ControlPanel页面新建了一个项目来测试Shell.Current.GoToAsync($"//{nameof(ControlPanel)}/{nameof(AboutHelp)}", true);,但是没有任何问题,无法从ControlPanel页面导航到AboutHelp页面
根据官方关于绝对路线的文件:
诸如await Shell.Current.GoToAsync("//animals/monkeys");之类的代码用于导航到猴子路由的页面,路由在ShellContent对象上定义。表示猴子路由的ShellContent对象是FlyoutItem对象的子对象,其路由是animals
但是在您注册路由的代码中,AboutHelp Page不是ControlPanel Page的子页面,所以您可以直接尝试使用Shell.Current.GoToAsync({nameof(AboutHelp), true)
此外,导航返回按钮有一个bug。当你在AppShell.xaml和AppShell.xaml.cs中注册路由时。例如同时使用<ShellContent Route="MainPage" ContentTemplate="{DataTemplate local:MainPage}" />Routing.RegisterRoute(nameof(MainPage), typeof(MainPage));。返回按钮将从导航堆栈中的第三页起不起作用。你需要删除<ShellContent>中的Route="MainPage"
有关详细信息,您可以参考AppShell-无法返回导航的案例。

相关问题