Xamarin Forms Master Detail 将 Master 保留在左侧
Posted
技术标签:
【中文标题】Xamarin Forms Master Detail 将 Master 保留在左侧【英文标题】:Xamarin Forms Master Detail Keep Master on the left 【发布时间】:2018-01-17 21:30:07 【问题描述】:我试图始终将母版页(菜单)保持在 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 内。
【问题讨论】:
【参考方案1】:您可以推送新页面,只需从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();
【讨论】:
您好,尼克,感谢您的回复!实际上,我已经将我的 Root 页面的范围从私有更改为公共,并将详细信息添加为页面的新实例以进行导航。但我只是担心这种导航方式效率低下,并且想知道是否有一种久经考验的方式。不过到目前为止,性能似乎还不错。 是的,从堆栈中移除并不是那么繁重,但您最好设置一个新的详细信息页面【参考方案2】:您只需更新 Detail 属性以指向新页面。像这样:
async void GoSecondPageAsync(object obj)
RootPage.Detail = new NavigationPage(new SecondPage());
App.MenuIsPresented = false;
【讨论】:
以上是关于Xamarin Forms Master Detail 将 Master 保留在左侧的主要内容,如果未能解决你的问题,请参考以下文章
iOS 上的 Xamarin.Forms Master/Detail 边缘滑动
Xamarin.Forms NavigationPage PushAsync 不滚动
Xamarin.Forms DLToolkit FlowListView 如何获取所选项目?