Xamarin Forms Java.Lang.IllegalArgumentException:DrawerLayout 必须使用 MeasureSpec.EXACTLY 进行测量

Xamarin Forms Java.Lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY

我将 Auth0 与 Xamarin Forms PCL 库一起使用。 我有以下 MainPage class :

namespace LoginPattern
{
    public class MainPage : MasterDetailPage
    {
        public MainPage ()
        {
            Master = new MenuPage ();
            Detail = new DetailPage ();
        }
    }
}

并在申请中关注 class

public App ()
{   
    Current = this;

    Login ();
}

public void ShowMainPage ()
{   
    MainPage = new MainPage ();
}

public async void Login ()
{
    await DependencyService.Get<IAuth0WidgetLogin>().LoginUseAuth0EmbeddedWidget();
    App.Current.Properties["IsLoggedIn"] = true;

    ShowMainPage ();
}

因此,在登录时,我最初没有加载任何页面,除了 Auth0 登录小部件。成功登录后,我想显示 MasterDetailPage。但是出现以下错误: Java.Lang.IllegalArgumentException: DrawerLayout 必须用MeasureSpec.EXACTLY来测量。

请告知我是否需要在 NavigationPage 中加载 Widget 以及如何加载。

编辑 17 月 7 日:

public class MenuPage : ContentPage
    {
        MasterDetailPage master;

        TableView tableView;

        public MenuPage ()
        {
            Title = "LoginPattern";
            Icon = "slideout.png";

            var section = new TableSection () {
                new TextCell {Text = "Sessions"},
                new TextCell {Text = "Speakers"},
                new TextCell {Text = "Favorites"},
                new TextCell {Text = "Room Plan"},
                new TextCell {Text = "Map"},
            };

            var root = new TableRoot () {section} ;

            tableView = new TableView ()
            { 
                Root = root,
                Intent = TableIntent.Menu,
            };

            var logoutButton = new Button { Text = "Logout" };
            logoutButton.Clicked += (sender, e) => {
                App.Current.Logout();
            };

            Content = new StackLayout {
                BackgroundColor = Color.Gray,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Children = {
                    tableView, 
                    logoutButton
                }
            };
        }


    }


public class DetailPage : ContentPage
{
    public DetailPage ()
    {
        BackgroundColor = new Color (0, 0, 1, 0.2);

        var text = "Slide > to see the master / menu";

        if (Device.OS == TargetPlatform.Android) {
            text = @"Click the action bar dots to see the master / menu";
        } else if (Device.OS == TargetPlatform.WinPhone) {
            text = @"Click button \/ to see the master / menu ";
        }

        Content = new StackLayout { 
            HorizontalOptions = LayoutOptions.Center,
            Padding = new Thickness (10, 40, 10, 10),
            Children = {

                new Label { Text = text }
            }
        };
    }
}

我会尝试做两件事:

  1. 在尝试显示身份验证小部件之前,将应用程序的 MainPage 设置为空白页(或类似初始页的内容)。
  2. 在您的 MenuPage 上设置明确的宽度要求。

仅供参考,以下是我的最终解决方案:

public class MainPage : MasterDetailPage
{
    public MainPage ()
    {
        Master = new MenuPage (this);
        Detail = new DetailPage ();
        ShowLoginDialog ();
    }

    async void ShowLoginDialog()
    {
        var page = new LoginPage();

        await Navigation.PushModalAsync(page);

        App.Current.Login ();
        await Navigation.PopModalAsync();
    }
}

PS: LoginPage 只是一个空的 ContentPage。