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 到不同的页面,在它们之间移动,没有导航堆栈。