xamarin Shell.Current.GoToAsync()未按预期工作

bvuwiixz  于 2023-05-21  发布在  Shell
关注(0)|答案(1)|浏览(228)

我注册了路由并在单击按钮后调用了方法,但转换到所需的页面不起作用。我是一个初学者,我真的不明白问题是什么。
路线登记:

namespace MuseumFinder;

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

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

        Routing.RegisterRoute("MainPage/MuseumListPage", typeof(MuseumListPage));
    }
}

方法调用:

namespace MuseumFinder;

public partial class MainPage : ContentPage
{
    
    public MainPage()
    {
        InitializeComponent();        
    }

    private async void Button_Clicked(object sender, EventArgs e)
    {        
        await Shell.Current.GoToAsync("//MainPage/MuseumListPage");        
    }
}

点击按钮后,会发生以下情况:

<?xml version="1.0" encoding="UTF-8" ?>
<Shell
    x:Class="MuseumFinder.AppShell"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:views="clr-namespace:MuseumFinder.Views"
    xmlns:searchHandlers="clr-namespace:MuseumFinder.SearchHandlers"
    xmlns:local="clr-namespace:MuseumFinder"
    Shell.FlyoutBehavior="Disabled">

    <ShellContent
        Title="Home"
        ContentTemplate="{DataTemplate local:MainPage}"
        Route="MainPage" />

</Shell>
iibxawm4

iibxawm41#

这里是:

<ShellContent
        Title="Home"
        ContentTemplate="{DataTemplate local:MainPage}"
        Route="MainPage" />

与此相结合:

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

是个错误。不要两次定义路由。一次在XAML中,一次在XAML.CS中。

Routing.RegisterRoute("MainPage/MuseumListPage", typeof(MuseumListPage));

这是个错误在99.99%的情况下,你不会想要这样做。**nameof(MuseumListPage)**是正确的(通常的)路径。
分享你的应用程序构建器是个好主意。
“不工作”也是一种非常糟糕的描述方式。如果一切正常,你就不会在这里了。所以细节很重要。

相关问题