不支持 Xamarin PushAsync 方法

Xamarin PushAsync method not supported

我已经阅读了 this 线程和其他一些关于类似错误的内容,但遗憾的是我仍然不明白如何解决我的问题。

我有一个方法应该打开 ZXScannerPage 以便我可以阅读二维码

protected override async void OnAppearing()
    {
        base.OnAppearing();

        var scanPage = new ZXingScannerPage();
        scanPage.OnScanResult += (result) => {
            // Stop scanning
            scanPage.IsScanning = false;

            // Pop the page and show the result
            Device.BeginInvokeOnMainThread(() => {
                Navigation.PopAsync();
                DisplayAlert("Scanned Barcode", result.Text, "OK");
            });
        };

        // Navigate to our scanner page
        await Navigation.PushAsync(scanPage); // Here is the error            
    }

我需要在 await Navigation.PushAsync(scanPage); 调用

之前使用此功能
MainPage = new NavigationPage(<Something goes here>);

但我不确定它应该去哪里,我应该给它什么参数

不支持

PushAsync方法,因为应用的MainPage不是NavigationPage.

创建重写 OnAppearing 方法的页面。在此方法中使用您的代码。

当应用程序在 App.xaml.cs 或 App.cs 中启动时,取决于项目类型,调用构造函数

MainPage = new NavigationPage(new YourPage());

这将在您的页面中调用 OnAppearing 方法,您的代码会将扫描仪页面向上推送。

编辑 你可以像

一样使用你的scannerPage
var scanPage = new ZXingScannerPage();
scanPage.OnScanResult += (result) => {
            // Stop scanning
            scanPage.IsScanning = false;

            // Pop the page and show the result
            Device.BeginInvokeOnMainThread(() => {
                Navigation.PopAsync();
                DisplayAlert("Scanned Barcode", result.Text, "OK");
            });
        };
MainPage = new NavigationPage(scanPage);

在这种情况下,扫描完成后 Navigation.PopAsync() 将不起作用,因为导航堆栈中只有一页(NavigationPage 除外)。

我想你想知道如何初始化和使用导航页面功能,

在使用 PushAsync 和 PopAsync 功能之前,您需要使用应用中的某个页面初始化一个新的导航页面。

MainPage = new NavigationPage(Something goes here);

您可以将导航页面设置为应用 class 中的主页面,使用您应用中的一些基页,即登录页面或欢迎页面

public class App : Application
{
  public App()
  {
    var nPage = new NavigationPage(new WelcomePage()); // or new LoginPage()
    MainPage = nPage;
  }
}

现在您已经使用一些基本页面初始化了导航页面,您可以推送或弹出其他页面,即您的扫描页面。