How to remove a modal page from NavigationStack in Xamarin.Forms

后端 未结 2 1350
猫巷女王i
猫巷女王i 2020-12-21 02:10

Here\'s an example for my Navigation:

LoginPage ( Login_Click  ) -> MainPage   | Block BackButton
MainPage  ( Logout_Click )         


        
相关标签:
2条回答
  • 2020-12-21 02:24

    You are looking for PopToRootAsync. So your user enters required info and they tap a login button, you perform your login verification and if success you set a new MainPage and then PopToRootAsync which pops all but the root Page off the navigation stack.

    Update: Due to the way PopToRootAsync is done across the various platforms, you need to start from a NavigationPage but can remove it as your root page after your login process.

    So in your Application constructor, instead of just creating your LoginPage, place it into a NavigationPage but hide the navigation bar so it does not effect your LoginPage screen layout:

    public App()
    {
        var navPage = new NavigationPage(new LoginPage());
        NavigationPage.SetHasNavigationBar(navPage.CurrentPage, false);
        MainPage = navPage;
    }
    

    Then within your LoginPage you can set the Application.Current.MainPage to any Page class (does not have to be a NavigationPage) and then PopToRootAsync to get to it and totally remove your LoginPage from the navigation hierarchy.

    public partial class LoginPage : ContentPage
    {
        public LoginPage()
        {
            InitializeComponent();
            loginDone.Clicked += OnLoginClick;
        }
        async void OnLoginClick(object sender, EventArgs e)
        {
            // If Login is complete/successful - set new root page
            if (YourLoginMethod()) {
                Application.Current.MainPage = new MainApplicationPage();
                // Pops all but the root Page off the navigation stack, with optional animation.
                await Navigation.PopToRootAsync(true);
            }
        }
    }
    

    Note: Tested this technique only on iOS and Android

    0 讨论(0)
  • 2020-12-21 02:26

    Rather than pushing the new page onto the NavigationStack that you no longer want, just set the App.MainPage to the new page.

    0 讨论(0)
提交回复
热议问题