Fel*_* D. 4 c# navigation android xamarin xamarin.forms
这是我的一个例子Navigation
:
LoginPage ( Login_Click ) -> MainPage | Block BackButton
MainPage ( Logout_Click ) -> LoginPage | Block going back to the MainPage
Run Code Online (Sandbox Code Playgroud)
目前我使用此代码显示MainPage
成功登录后.
await Navigation.PushModalAsync(new MainPage());
Run Code Online (Sandbox Code Playgroud)
我不希望用户通过点击PreviousButton(Android)
返回到LoginPage返回.
退出时的故事相同.
有没有办法在成功登录后从NavigationStack中删除LoginPage(并在注销时删除MainPage)?
注意:
这是模态的.我没有使用NavigationPage.
你在找PopToRootAsync
.因此,您的用户输入所需信息,他们点击登录按钮,您执行登录验证,如果成功,您设置一个新的MainPage
,然后PopToRootAsync
弹出除导航堆栈之外的所有根页面.
更新:由于PopToRootAsync
在各种平台上完成了这种方式,您需要从a开始,NavigationPage
但可以在登录过程后将其作为根页删除.
因此,在您的Application构造函数中,不是仅创建您的LoginPage
,NavigationPage
而是将其放入但隐藏导航栏,以免影响您的LoginPage
屏幕布局:
public App()
{
var navPage = new NavigationPage(new LoginPage());
NavigationPage.SetHasNavigationBar(navPage.CurrentPage, false);
MainPage = navPage;
}
Run Code Online (Sandbox Code Playgroud)
然后你中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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:仅在iOS
和上测试此技术Android
归档时间: |
|
查看次数: |
5051 次 |
最近记录: |