簡體   English   中英

如何從Xamarin.Forms中的NavigationStack中刪除模式頁面

[英]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);
        }
    }
}

注意:僅在iOSAndroid上測試了此技術

無需將新頁面推送到不再需要的NavigationStack上,只需將App.MainPage設置為新頁面即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM