我试图始终将Master页面(菜单)保留在My MasterDetailPage的左侧,我不希望导航使用户远离MasterDetailPage并让用户按下后退按钮返回。
我正在寻找左边的传统汉堡酒吧菜单,只需更改详细信息页面并保持主人就位。
我现在拥有的:
public partial class App : Application
{
public static NavigationPage NavPage { get; private set; }
private static RootPage RootPage;
public static bool MenuIsPresented
{
get
{
return RootPage.IsPresented;
}
set
{
RootPage.IsPresented = value;
}
}
public App()
{
InitializeComponent();
MenuPage menuPage = new MenuPage();
NavPage = new NavigationPage(new FirstPage());
RootPage = new RootPage();
RootPage.Master = menuPage;
RootPage.Detail = NavPage;
MainPage = RootPage;
}
...
}
我的ViewModel命令
async void GoSecondPageAsync(object obj)
{
await App.NavPage.PushAsync(new SecondPage());
App.MenuIsPresented = false;
}
但是这只是在堆栈顶部创建一个新页面,后面的按钮返回到MasterDetailPage,而我想要的只是留在MasterDetailPage中。
答案 0 :(得分:2)
您可以推送新页面,只需删除NavigationStack
中的第一个,例如:
async void GoSecondPageAsync(object obj)
{
await App.NavPage.PushAsync(new SecondPage());
var removePage = App.NavPage.Navigation.NavigationStack[0];
App.NavPage.Navigation.RemovePage(removePage);
App.MenuIsPresented = false;
}
虽然,如果你总是想要替换页面,你真的甚至需要NavigationPage,你不能只设置RootPage.Detail=new SecondPage();
答案 1 :(得分:1)
您只需要更新Detail属性以指向新页面。像这样:
async void GoSecondPageAsync(object obj)
{
RootPage.Detail = new NavigationPage(new SecondPage());
App.MenuIsPresented = false;
}