C# 缺陷System.ArgumentException:';无法确定以下各项的路由:
错误 System.ArgumentException:'无法计算以下项的路由: //RegisterPage参数名称:uri“System.ArgumentException:”无法 要计算://LogoPage参数名称:uri'的路由 怎么了?它不能找出路线 XAML WelcomeViewModel.csC# 缺陷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
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>