gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:12:47 25 4
gpt4 key购买 nike

这是我的导航的示例:

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

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

 await Navigation.PushModalAsync(new MainPage());

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

注销时同样的故事。

有没有办法在成功登录后从 NavigationStack 中删除 LoginPage(并在注销时删除 MainPage)?

注意:

这是模态的。我没有使用 NavigationPage。

最佳答案

您正在寻找 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 上测试了此技术

关于c# - 如何从 Xamarin.Forms 中的 NavigationStack 中删除模式页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37398962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com