我有一个小应用程序,需要从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。