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