如何从堆栈导航 Xamarin Forms 中删除当前页面

5 c# xamarin.forms

我很努力地做某事,但我无法解决这个问题。我有三个页面,一个是 MainPage、LoginUpPage 和 SignUpPage,LoginUpPage 里面有一个导航到 SignUpPage 的按钮,我想要做的是当我完成我的逻辑导航到另一个页面 CreatedPage,其中包含一个带有消息的标签 -成功,然后在 2 秒后返回到登录页面,问题是如果我从设备上按下后退按钮,它会返回到带有消息标签的最后一页,我不想要那样。我有一个带有 BackButton 的工具栏,可以返回到我导航的每个页面。到目前为止,我有这个:

登录页面到注册页面:

Navigation.PushAsync(new SignupPage());
Run Code Online (Sandbox Code Playgroud)

SignUpPage 到 CreatedPage :

await Navigation.PushModalAsync(new Created());
Run Code Online (Sandbox Code Playgroud)

在我的构造函数中的 CreatedPage 内部,此方法:

    public async void Redirect()
    {
        await Task.Delay(TimeSpan.FromSeconds(2));
        await Navigation.PushAsync(new LoginPage());
    }
Run Code Online (Sandbox Code Playgroud)

我通过这个问题知道基本上有三种方法可以导航到另一个页面:

Navigation.PushAsync(new OtherPage()); // to show OtherPage and be able to go back
Run Code Online (Sandbox Code Playgroud)

Navigation.PushAsyncModal(new AnotherPage());// to show AnotherPage and not have a Back button

Navigation.PopAsync();// to go back one step on the navigation stack

在同一个问题中有一个示例如何从堆栈中删除页面,但它不起作用。

item.Tapped += async (sender, e) => {
await Navigation.PushAsync (new SecondPage ());
Navigation.RemovePage(this);
Run Code Online (Sandbox Code Playgroud)

};

Him*_*edi 3

在这种情况下,您需要设置一个根页面:

//Master Detail Page

  public class RootPage : MasterDetailPage
    {
        MenuPage menuPage;

        public RootPage()
        {
            menuPage = new MenuPage(this);
            Master = menuPage;
            Detail = new NavigationPage(new HomePage());
        }
    }
Run Code Online (Sandbox Code Playgroud)
//Set the Root Page
public class App : Application
{
    public App()
    {
       InitializeComponent ();

       if(NewUser || NotLoggedIn)
          {
             MainPage = new LoginPage();
          }
       else
          {
             MainPage = new RootPage();
          }
    }
}

public class LoginPage : ContentPage
    {            
        private void SignupButtonOnClicked(object sender, EventArgs eventArgs)
        {
            Navigation.PushAsync(new SignupPage());
        }
    }


public class SignupPage : ContentPage
    {            
        private void CreatedButtonOnClicked(object sender, EventArgs eventArgs)
        {
            Navigation.PushModalAsync(new CreatedPage());
        }
    }

// Set the Login Page

public class CreatedPage : ContentPage
    {

        private void CreatedButtonOnClicked(object sender, EventArgs eventArgs)
        {
            Navigation.PushModalAsync(new LoginPage());

            //Special Handel for Android Back button
            if (Device.OS == TargetPlatform.Android)
            Application.Current.MainPage = new LoginPage();
        }

    }
Run Code Online (Sandbox Code Playgroud)

这样,后退按钮将不会返回到上一页,因为它将重置导航堆栈到根页面,即您的登录页面。