[英]How to remove a modal page from NavigationStack in Xamarin.Forms
這是我的Navigation
示例:
LoginPage ( Login_Click ) -> MainPage | Block BackButton
MainPage ( Logout_Click ) -> LoginPage | Block going back to the MainPage
當前,成功登錄后,我正在使用此代碼顯示MainPage
。
await Navigation.PushModalAsync(new MainPage());
我不希望用戶通過單擊PreviousButton(Android)
返回到LoginPage來返回。
注銷時的情況相同。
成功登錄后,是否有辦法從NavigationStack中刪除LoginPage(並在注銷時刪除MainPage)?
注意:
這是模態的。 我沒有使用NavigationPage。
您正在尋找PopToRootAsync
。 因此,您的用戶輸入所需的信息,然后點擊登錄按鈕,您將執行登錄驗證,如果成功,您將設置一個新的MainPage
,然后設置PopToRootAsync
,它將除根頁面之外的所有頁面都彈出導航堆棧。
更新 :由於PopToRootAsync
是在各種平台上完成的方式,因此您需要從NavigationPage
開始,但是可以在登錄過程之后將其作為根頁刪除。
因此,在您的Application構造函數中,不要僅僅創建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);
}
}
}
注意:僅在iOS
和Android
上測試了此技術
無需將新頁面推送到不再需要的NavigationStack上,只需將App.MainPage設置為新頁面即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.