Xamarin.Forms 删除页面

标签 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());
   }
}

最佳答案

Xamarin.Forms 1.3 添加了添加和删除页面的功能,按照您的建议重置导航堆栈的根。您的代码表明您使用的版本至少为 1.3。但是,立即调用 PopAsync() 并不是您想要使用的方法,因为如果该页面是堆栈中的唯一页面,则它不会弹出该页面。而是首先使用 INavigation 接口(interface)的 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 等异步方法添加新页面,则需要等待调用以确保在删除旧页面之前将新页面添加到堆栈中。

关于Xamarin.Forms 删除页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29042792/

相关文章:

c# - 单声道无法加载编码 437

android - 如何在 xamarin 表单中的 android 和 ios 中的状态栏下方添加阴影?

c# - Xamarin 可移植 .NETStandard 1.5 单元测试

ios - Xamarin UITableView 不会滚动

c# - 如何调用 method_getImplementation 的 IntPtr 结果

linux - 我可以在 Linux 上构建和编译跨平台 Xamarin 应用程序吗?

java - ItemTouchHelper onSwiped() 不更新来自构造函数的数据

xamarin - 按下电源按钮后振动器不振动?

ios - 使用 Jenkins 时的协同设计问题

c# - 禁止在 ListView 中选择项目