Xamarin表格大师细节左侧保持大师

时间:2017-08-09 20:25:03

标签: c# xamarin navigation xamarin.forms master-detail

我试图始终将Master页面(菜单)保留在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中。

2 个答案:

答案 0 :(得分:2)

您可以推送新页面,只需删除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();

答案 1 :(得分:1)

您只需要更新Detail属性以指向新页面。像这样:

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