Xamarin窗体主详细请法师在左边(Xamarin Forms Master Detail Kee

2019-10-28 12:32发布

我想,以保持主网页(菜单)我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内。

Answer 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();



Answer 2:

你只需要更新的详细属性指向新的一页。 像这样:

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


文章来源: Xamarin Forms Master Detail Keep Master on the left