C# 缺陷System.ArgumentException:';无法确定以下各项的路由:

C# 缺陷System.ArgumentException:';无法确定以下各项的路由:,c#,xamarin,xamarin.forms,xamarin.forms.shell,C#,Xamarin,Xamarin.forms,Xamarin.forms.shell,错误 System.ArgumentException:'无法计算以下项的路由: //RegisterPage参数名称:uri“System.ArgumentException:”无法 要计算://LogoPage参数名称:uri'的路由 怎么了?它不能找出路线 XAML WelcomeViewModel.cs public Command RegisterCommand { get; } public Command LoginCommand { get; } public WelcomeV

错误

System.ArgumentException:'无法计算以下项的路由: //RegisterPage参数名称:uri“System.ArgumentException:”无法 要计算://LogoPage参数名称:uri'的路由

怎么了?它不能找出路线

XAML

WelcomeViewModel.cs

public Command RegisterCommand { get; }
public Command LoginCommand { get; }

public WelcomeViewModel()
{
    RegisterCommand = new Command(OnRegisterClicked);
    LoginCommand = new Command(OnLoginClicked);
}

private async void OnRegisterClicked(object obj)
{
    await Shell.Current.GoToAsync($"//{nameof(RegisterPage)}");
}

private async void OnLoginClicked(object obj)
{
    await Shell.Current.GoToAsync($"//{nameof(LoginPage)}");
}

您需要使用
Shell.Current.GoToAsync()
,为您希望导航到的每个页面注册路由,通过这种方式,您还可以澄清页面层次结构:

    <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">

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

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

        <ShellContent Title="Page3"
                      ContentTemplate="{DataTemplate local:Page3}"/>

    </FlyoutItem>

如果愿意,还可以在代码中使用
Routing.RegisterRoute()
注册路由,只要它在调用路由之前运行:
Routing.RegisterRoute(//Page3),typeof(Page3))

Microsoft文档
有关更多详细信息:

您如何在主页
中使用
LoginPage
RegisterPage
?换句话说,页面的层次结构是什么?您是否已使用
路由注册页面
?当您尝试导航到具有IsVisible=“false”(Xamarin.Forms 4.8.0.1451)@This.i的弹出项或菜单项时,也会引发此异常。我将对其进行测试,您是否已使用5.0.0预版本(如果已修复)或现在进行了测试?或者如果isuue已经被完全填满了?不,我没有使用5.0 pre进行测试,也没有查找是否存在问题,因为我找到了问题的解决方案
public Command RegisterCommand { get; }
public Command LoginCommand { get; }

public WelcomeViewModel()
{
    RegisterCommand = new Command(OnRegisterClicked);
    LoginCommand = new Command(OnLoginClicked);
}

private async void OnRegisterClicked(object obj)
{
    await Shell.Current.GoToAsync($"//{nameof(RegisterPage)}");
}

private async void OnLoginClicked(object obj)
{
    await Shell.Current.GoToAsync($"//{nameof(LoginPage)}");
}
    <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">

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

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

        <ShellContent Title="Page3"
                      ContentTemplate="{DataTemplate local:Page3}"/>

    </FlyoutItem>