如何从 Xamarin.Forms 中的 NavigationStack 中删除模式页面



这是我Navigation的一个例子:

LoginPage ( Login_Click  ) -> MainPage   | Block BackButton
MainPage  ( Logout_Click ) -> LoginPage  | Block going back to the MainPage

目前,我正在使用此代码在成功登录后显示MainPage

 await Navigation.PushModalAsync(new MainPage());

不希望用户通过点击PreviousButton(Android)返回登录页面来返回。

注销时的情况相同。

有没有办法在成功登录后从导航堆栈中删除登录页面(并在注销时删除主页)?

注意:

这是模态的。我没有使用导航页面。

您正在寻找PopToRootAsync .因此,您的用户输入所需的信息,然后点击登录按钮,执行登录验证,如果成功,则设置一个新MainPage,然后PopToRootAsync从导航堆栈中弹出除根页面之外的所有页面。

更新:由于PopToRootAsync在各个平台上完成的方式,您需要从NavigationPage开始,但可以在登录过程后将其作为根页面删除。

因此,在您的应用程序构造函数中,不仅仅是创建您的LoginPage,将其放入NavigationPage隐藏导航栏,使其不会影响您的LoginPage屏幕布局:

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

然后在您的LoginPage中,您可以将Application.Current.MainPage设置为任何Page类(不必NavigationPage),然后PopToRootAsync访问它并从导航层次结构中完全删除您的LoginPage

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

注意:仅在iOSAndroid上测试了此技术

无需将新页面推送到不再需要的 NavigationStack 上,只需将 App.MainPage 设置为新页面即可。

相关内容

  • 没有找到相关文章

最新更新