如何从Xamarin.Forms中的NavigationStack中删除模态页面

时间:2016-05-23 19:24:32

标签: c# android xamarin navigation xamarin.forms

以下是 <div class="row"> <div class="col-md-6"> <input type="submit" value="Save" class="btn btn-lg btn-primary" OnClick="return confirm('¿Are you sure you want to delete this item?');" /> </div> @if (!Model.IsNew) { <div class="col-md-6"> <a href="@(Url.Action<UnitsController>(c => c.Delete(Model.Entity.Id)))" class="btn btn-primary col-md-offset-9 col-md-3 ">Delete</a> </div> } </div>

的示例
Navigation

目前我使用此代码在成功登录后显示LoginPage ( Login_Click ) -> MainPage | Block BackButton MainPage ( Logout_Click ) -> LoginPage | Block going back to the MainPage

MainPage

不要希望用户通过点击 await Navigation.PushModalAsync(new MainPage()); 返回登录页面返回。

退出时的相同故事。

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

注意:

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

2 个答案:

答案 0 :(得分:8)

您正在寻找PopToRootAsync。因此,您的用户输入所需信息,他们点击登录按钮,您执行登录验证,如果成功,您设置一个新的MainPage,然后PopToRootAsync,它会弹出除导航堆栈之外的所有根页。< / p>

更新:由于PopToRootAsync在各种平台上的运行方式,您需要从NavigationPage开始,但可以在登录后将其作为根页删除处理。

因此,在您的Application构造函数中,不是仅创建LoginPage,而是将其放入NavigationPage隐藏导航栏,以免影响您的{{1}屏幕布局:

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); } } } iOS

上测试此技术

答案 1 :(得分:1)

不要将新页面推送到您不再需要的NavigationStack上,只需将App.MainPage设置为新页面即可。