Xamarin Forms Master Detail 保持Master在左边
Xamarin Forms Master Detail Keep Master on the left
我试图始终将母版页(菜单)保持在 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 中。
您可以推送新页面,只需从 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();
您只需更新详细信息 属性 以指向新页面。像这样:
async void GoSecondPageAsync(object obj)
{
RootPage.Detail = new NavigationPage(new SecondPage());
App.MenuIsPresented = false;
}
我试图始终将母版页(菜单)保持在 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 中。
您可以推送新页面,只需从 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();
您只需更新详细信息 属性 以指向新页面。像这样:
async void GoSecondPageAsync(object obj)
{
RootPage.Detail = new NavigationPage(new SecondPage());
App.MenuIsPresented = false;
}