Xamarin.Forms删除页面

时间:2015-03-13 22:07:48

标签: xamarin

当我的应用首次启动时,我会显示一个登录页面。在登录按钮中,如果他们能够登录我想删除登录页面并导航到选项卡页面。在此标签页中,我将有一个设置页面,允许我在需要时返回登录页面。现在我有以下但它不起作用。显示主页,但登录页面的后退箭头显示,我不想要。

public class LoginPage: ContentPage
{
   public LoginPage() { // create controls here }

   public btnLogin_Clicked(object sender, EventArgs e){
      Navigation.PopAsync(); // remove this page (doesn't work)
      Navigation.PushAsync(new HomePage());
   }
}

public class App : Application
{
   public App()
   {
      MainPage = new NavigationPage(new LoginPage());
   }
}

3 个答案:

答案 0 :(得分:6)

Xamarin.Forms 1.3添加了添加和删除页面的功能,如您所建议的那样重置导航堆栈的根目录。您的代码表明您使用的是至少1.3版。但是,直接调用PopAsync()不是您想要使用的方法,因为如果它是堆栈中唯一的页面,它将不会弹出页面。而是首先使用INavigation接口的InsertPageBefore(newPage,pageToPutBefore)方法,然后在堆栈末尾弹出登录页面。

您可以尝试与此类似的代码:

public async void btnLogin_Clicked(object sender, EventArgs e)
{
    // Do some login logic and if successful ...
    Navigation.InsertPageBefore(new HomePage(), this); 
    await Navigation.PopAsync().ConfigureAwait(false); 
}

Xamarin.Forms 1.3中有几种新方法可以大大提高导航功能。上述问题的另一个可能的解决方案是首先将HomePage添加到堆栈的末尾,然后使用新的RemovePage方法从堆栈的开头删除登录页面,使HomePage成为唯一的页面。有一件事你要小心,如果你使用像PushAsync这样的异步方法添加新页面,你需要等待调用以确保在删除旧页面之前将新页面添加到堆栈中。

答案 1 :(得分:2)

又一个解决方案:更改MainPage属性

    App.cs构造函数中的
  • 公共应用() {     MainPage = new LoginPage(); }

  • 您在登录方式中
  •     Device.BeginInvokeOnMainThread(() =>
        {
            Application.Current.MainPage = new NavigationPage(new HomePage());
        });
    

答案 2 :(得分:0)

对于您的第二点,登录页面的后退箭头显示,您不希望>>

使用此NavigationPage.SetHasBackButton(YourPage,false); 这将从导航栏中删除后退按钮

作为上述代码的示例,

         HomePage myHomePage = new HomePage();


         NavigationPage.SetHasNavigationBar(myHomePage , false);

         Navigation.PushAsync(myHomePage);

你可以探索更多的NavigationPage方法 - 比如SetHasNavigationBar等等,它们真的很棒。

如果有帮助,请告诉我。