Xamarin 表单 Shell 导航失败 System.NullReferenceException
Xamarin Forms Shell Navigation Failure with System.NullReferenceException
这是一个尝试 Xamarin Forms 导航功能的示例应用程序。
我们有一个具有以下简单逻辑的事件处理程序:
async void Button_Clicked(System.Object sender, System.EventArgs e)
{
await Shell.Current.GoToAsync(nameof(SchoolList));
}
我们也在App.xaml.cs中注册了路由如下:
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new MainPage();
Routing.RegisterRoute(nameof(SchoolList), typeof(SchoolList));
}
但是,当点击相应的按钮时,出现如下错误:
System.NullReferenceException: Object reference not set to an instance of an object.
at cross_app1.MainPage.Button_Clicked (System.Object sender, System.EventArgs e) [0x0000f] in /Users/klaus.nji/Projects/cross-app1/cross-app1/MainPage.xaml.cs:18
at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1021
at Android.App.SyncContext+<>c__DisplayClass2_0.<Post>b__0 () [0x00000] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/Android.App/SyncContext.cs:36
at Java.Lang.Thread+RunnableImplementor.Run () [0x00008] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/Java.Lang/Thread.cs:36
at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00008] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-30/mcw/Java.Lang.IRunnable.cs:84
at at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.39(intptr,intptr)
系统是 Mac Catalina v10.15.7,IDE 是 Visual Studio 2019 for Mac 我安装了 Andriod SDK 并且能够看到其他方面应用程序。
您似乎没有 Shell,因此 Shell.Current 为空。
您遵循了哪个 Shell 示例?
MainPage = new MainPage();
表示您的应用程序指向 MainPage 类型的页面。要使用 Shell(路线)导航,它需要指向 Shell。
我希望看到 MainPage = new AppShell();
。
可能还遗漏了其他细节,所以一定要遵循一个有效的例子,例如Xaminals。
新 AppShell 行可以在 https://github.com/xamarin/xamarin-forms-samples/blob/main/UserInterface/Xaminals/Xaminals/App.xaml.cs.
中看到
注意:可以在 Xamarin Forms 中导航而无需 Shell,也无需定义路由。 (就个人而言,我不喜欢 Shell,所以我不使用它。)您可以将 MainPage 定义为 NavigationPage(请参阅其文档)。或者您可以简单地设置 App.MainPage 到不同的页面,在它们之间移动,没有导航堆栈。
这是一个尝试 Xamarin Forms 导航功能的示例应用程序。 我们有一个具有以下简单逻辑的事件处理程序:
async void Button_Clicked(System.Object sender, System.EventArgs e)
{
await Shell.Current.GoToAsync(nameof(SchoolList));
}
我们也在App.xaml.cs中注册了路由如下:
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new MainPage();
Routing.RegisterRoute(nameof(SchoolList), typeof(SchoolList));
}
但是,当点击相应的按钮时,出现如下错误:
System.NullReferenceException: Object reference not set to an instance of an object.
at cross_app1.MainPage.Button_Clicked (System.Object sender, System.EventArgs e) [0x0000f] in /Users/klaus.nji/Projects/cross-app1/cross-app1/MainPage.xaml.cs:18
at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1021
at Android.App.SyncContext+<>c__DisplayClass2_0.<Post>b__0 () [0x00000] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/Android.App/SyncContext.cs:36
at Java.Lang.Thread+RunnableImplementor.Run () [0x00008] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/Java.Lang/Thread.cs:36
at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00008] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-30/mcw/Java.Lang.IRunnable.cs:84
at at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.39(intptr,intptr)
系统是 Mac Catalina v10.15.7,IDE 是 Visual Studio 2019 for Mac 我安装了 Andriod SDK 并且能够看到其他方面应用程序。
您似乎没有 Shell,因此 Shell.Current 为空。 您遵循了哪个 Shell 示例?
MainPage = new MainPage();
表示您的应用程序指向 MainPage 类型的页面。要使用 Shell(路线)导航,它需要指向 Shell。
我希望看到 MainPage = new AppShell();
。
可能还遗漏了其他细节,所以一定要遵循一个有效的例子,例如Xaminals。
新 AppShell 行可以在 https://github.com/xamarin/xamarin-forms-samples/blob/main/UserInterface/Xaminals/Xaminals/App.xaml.cs.
中看到注意:可以在 Xamarin Forms 中导航而无需 Shell,也无需定义路由。 (就个人而言,我不喜欢 Shell,所以我不使用它。)您可以将 MainPage 定义为 NavigationPage(请参阅其文档)。或者您可以简单地设置 App.MainPage 到不同的页面,在它们之间移动,没有导航堆栈。