Xamarin Forms Master Detail Keep Master on the left

独自空忆成欢 提交于 2019-12-13 07:35:59

问题


I am trying to keep the Master page (menu) to the left of My MasterDetailPage at all times, I do not want the navigation to take the user away from the MasterDetailPage and make the user press a back button to get back.

I am looking a traditional burger bar menu to the left that simply changes the Detail page and keeps the master in place.

What I have now:

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;

    }
...
}

And my ViewModel Command

async void GoSecondPageAsync(object obj)
    {
        await App.NavPage.PushAsync(new SecondPage());
        App.MenuIsPresented = false;
    }

But this just creates a new page on top of the stack with a back button back to the MasterDetailPage, while all I want is to stay within the MasterDetailPage.


回答1:


You can push the new page and just remove the first one from the NavigationStack For example:

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;
}

Although, if you just always want to replace the page do you really even need the NavigationPage and can't you just set the RootPage.Detail=new SecondPage();




回答2:


You just need to update the Detail property to point to the new page. Like this:

async void GoSecondPageAsync(object obj)
    {
        RootPage.Detail = new NavigationPage(new SecondPage());
        App.MenuIsPresented = false;
    }


来源:https://stackoverflow.com/questions/45600039/xamarin-forms-master-detail-keep-master-on-the-left

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!