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

Posted

技术标签:

【中文标题】分配 App.MainPage 时 MasterDetailPage 上缺少菜单按钮【英文标题】:Missing menu button on MasterDetailPage when assigning App.MainPage 【发布时间】:2016-08-28 12:14:51 【问题描述】:

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

MainPage = new NavigationPage(new MyContentPage());

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

MasterDetailsPage 显示出来了,但是导航栏中的按钮不见了。

如果我只是使用

Navigation.PushModalAsync(new MyMasterDetailpage());

我什至没有导航栏,有

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

菜单图标又不见了。

我可以在这里做什么?

更新

看来我的问题只在安卓上,不知道new NavigationPage(new MyDetailView)汉堡包只出现在安卓上。

【问题讨论】:

我遇到了同样的问题,您找到解决方案了吗? @DonBox 不,我没有。我改变了 MasterDetailPage 的显示方式和时间。我的解决方案是从一开始就设置MainPage = new MyMasterDetailpage(),然后在其上放置一个模态MyContentPage()。如果登录成功,我只需在显示 MasterDetailPage 的代码中弹出模式。 NavoigationPage 中的 MasterDetail 似乎不起作用,也不需要我现在这样做 谢谢!我看到的是如果应用程序以MainPage = new NavigationPage(new MyMasterDetailPage()) 开头,它可以工作,我可以看到滑动菜单按钮。但是如果应用程序以不同的 MainPage 启动,然后我将其设置为 new NavigationPage(new MyMasterDetailPage()),则滑动菜单按钮不可见。菜单在那里,因为如果我滑动它就会出现。也许这只是一个 UI 刷新问题。我什至正在考虑通过拥有NavigationPageContentPages 从头开始​​编写MD。滑块菜单将在ContentPage 页面内动态创建。还在想这个…… @Don Box 你有解决方案吗?我也有同样的问题。? 【参考方案1】:

Detail 页面是NavigationPage 时,NavigationMenu 会出现在MasterDetailPage 中。因此,您可以将其设置为 MainPage,而不是将 MasterDetailsPage 推送到 Navigation 堆栈。然后在 MasterDetailPage 中,您需要在 NavigationPage 中添加 DetailPage。 您可以使用MasterPage 的 Icon 属性为菜单设置图标 下面是一个例子,

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 设置为 root,整个树看起来就像 NavigationPage( contentPage -> contentPage -> MasterDetailPage ),它工作得很好 您无需将 MasterDetailPage 添加到 NavigationPage。您可以将 MasterDetailPage 设置为其他页面的根页面,例如 Application.Current.MainPage= new MyMasterDetailPage(); 我已经试过了,如果我按照你说的做,上面的整个酒吧都不见了,当然还有菜单汉堡 能分享一下MasterDetailPage和MasterDetailPage之前的Page的sn-ps吗? Thats my master detail from xamarin samples 和前面的 sn-ps 就是你刚才说的。我试过设置新的 MainPage,我试过 PushAsync 和其他我能猜到的东西【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

为什么要手动添加图标?如果我将我的 MasterDetailPage 用作应用程序的根,我会得到一个动画汉堡?! 只有在 android 上才能在 iOS 上获得动画效果 好的,我知道了,不知道谢谢。但是我的问题与android有关。如果因为如果我重新分配 Application.MainPage 我只会在那里得到一个空白导航栏 据我所知,Android 上也需要标题,否则我会遇到异常 看我怎么设置detail page,设置root是这样的:Application.Current.MainPage= new MyMasterDetailPage();【参考方案4】:

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

await Navigation.PushAsync(new MyMasterDetailPage());

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

选项是将 MasterDetailPage 设置为 MainPage

App.Current.MainPage = new MyMasterDetailPage();

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

【讨论】:

以上是关于分配 App.MainPage 时 MasterDetailPage 上缺少菜单按钮的主要内容,如果未能解决你的问题,请参考以下文章

Janus实际生产案例

Janus实际生产案例

x:绑定和用户控件

UWP:BackgroundTask 打开应用主页

git 在使用拉取、推送(pull或push)时时候会出现这样的错误提示

Design DataContext无法按预期工作