我有一个小应用,我需要从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上。
答案 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()
方法