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



我有一个小应用程序,需要从ContentPage切换到MasterDetailsPage

MainPage = new NavigationPage(new MyContentPage());

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

此时会显示MasterDetailsPage,但导航栏中的按钮会丢失。

如果我只是使用

Navigation.PushModalAsync(new MyMasterDetailpage());

我甚至没有导航栏,有

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

菜单图标再次丢失。

我能在这里做什么吗?

更新

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

Detail页面是NavigationPage时,导航菜单将显示在MasterDetailPage中。因此,您可以将MasterDetailsPage设置为MainPage,而不是将其推送到导航堆栈。然后在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;
    }
}

我也遇到了同样的问题。但解决办法是改变这个过程。您希望首先加载登录视图,然后显示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()方法

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

在您的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
        };
    }
}

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

await Navigation.PushAsync(new MyMasterDetailPage());

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

选项是将MasterDetailPage设置为主页

App.Current.MainPage = new MyMasterDetailPage();

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

相关内容

  • 没有找到相关文章

最新更新