不支持Xamarin PushAsync方法

时间:2017-04-19 05:03:49

标签: c# xamarin xamarin.forms async-await zxing

我已经阅读过this个帖子以及其他一些关于类似错误的帖子,但不幸的是我仍然不明白如何解决我的问题。

我有一个方法可以打开ZXScannerPage,以便我可以读取QR码

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>);

但我不确定这应该去哪里,以及我应该提供什么参数

2 个答案:

答案 0 :(得分:1)

不支持

PushAsync方法,因为该应用的主页不是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除外)。

答案 1 :(得分:0)

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

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

  

MainPage = new NavigationPage(Something goes here);

您可以使用应用中的某个基页(即登录页面或欢迎页面)将导航页面设置为App类中的主页面

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

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