分配App.MainPage时,MasterDetailPage上缺少菜单按钮

时间:2016-05-03 12:35:38

标签: android xamarin navigation xamarin.forms

我有一个小应用,我需要从ContentPage转换为MasterDetailsPage

MainPage = new NavigationPage(new MyContentPage());

现在,如果登录成功,我想将Root更改为MainPage = new NavigationPage(new MyMasterDetailpage());

显示MasterDetails页面,但导航栏中的按钮缺失。

如果我只是使用

Navigation.PushModalAsync(new MyMasterDetailpage());

我甚至没有使用

获得导航栏

Navigation.PushModalAsync(new NavigationPage(new MyMasterDetailpage()));

菜单图标再次丢失。

我能在这做什么吗?

更新

似乎我的问题只出现在Android上,并不知道new NavigationPage(new MyDetailView)汉堡包只出现在Android上。

4 个答案:

答案 0 :(得分:1)

MasterDetailPage页面为Detail时,

NavigationMenu会显示在NavigationPage中。因此,您可以将其设置为MainPage,而不是将MasterDetailsPage推送到导航堆栈。然后在MasterDetailPage中,您需要在NavigationPage中添加DetailPage。 您可以为图标属性MasterPage设置菜单的图标 以下是一个例子,

public class DashboardPage : MasterDetailPage
{
    DetailPage detailPage; 
    MenuPage  masterPage;
    NavigationPage detailNavigationPage;

    public DashboardPage ()
    {
        detailPage = new DetailPage ();
        detailNavigationPage=new NavigationPage(detailPage); // Navigation Page as parent for Detail Page.
        Detail = detailNavigationPage; 

        masterPage= new MenuPage(){Icon="ic_settings.png"}; // ic_settings.png willbe rendered as Menu Icon.
        Master = masterPage;

    }
}

答案 1 :(得分:0)

通过设置母版页的图标,您应该将您提供的图像作为导航栏中的按钮。

在MyMasterDetailpage

中尝试这样的方式
public class MyMasterDetailpage: MasterDetailPage
{
    public MyMasterDetailpage()
    {
        Detail = new NavigationPage (new Page());
        Master = new MenuPage () {
            Title = "Title",
            Icon = (Device.OS == TargetPlatform.iOS) ? "hamburgermenuicon.png" : null
        };
    }
}

答案 2 :(得分:0)

如果您使用PushModalAsync推送MasterDetailPage,则导航栏将不会显示,因为它将以全屏模式将该页面作为模态打开。 如果您将页面推送为:

await Navigation.PushAsync(new MyMasterDetailPage());

然后你会在导航栏上看到一个后退按钮,点击它会将你向后移动到之前的页面。所以你的汉堡包图标将不可见。

选项是将MasterDetailPage设置为您的MainPage

App.Current.MainPage = new MyMasterDetailPage();

如果您想要在MasterDetailPage之前添加的页面,您可以覆盖Android活动中的OnBackPressed()方法,并将您的页面推送到导航堆栈并弹出当前的MasterDetailpage。

答案 3 :(得分:0)

我遇到了同样的问题。但解决方案是使流程不同。您最初要加载登录视图,然后显示MasterDetail的视图。我解决了这个问题如下:

当您启动应用程序时,我创建MasterDetail的视图并立即将登录视图显示为对话框,如果登录成功则只需关闭对话框。代码看起来像这样:

public App()
{
    DependencyService.Register<IMessageService, MessageService>();
    DependencyService.Register<INavigationService,NavigationService>();

    InitializeComponent();

    MainPage = new NavigationPage(new MasterDetail());

    MercaFacil.App.Current.MainPage.Navigation.PushModalAsync(new NavigationPage(new LoginView()));
}

登录成功后,只需调用PopModalAsync()方法

即可