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 创建抽屉/滑块菜单?

Xamarin.Forms NavigationPage PushAsync 不滚动

Xamarin.Forms DLToolkit FlowListView 如何获取所选项目?

Xamarin.Forms:绑定SwipeView进行编码并获取事件

在横向模式下隐藏ToolBar Xamarin.Forms