当我的应用首次启动时,我会显示一个登录页面。在登录按钮中,如果他们能够登录我想删除登录页面并导航到选项卡页面。在此标签页中,我将有一个设置页面,允许我在需要时返回登录页面。现在我有以下但它不起作用。显示主页,但登录页面的后退箭头显示,我不想要。
public class LoginPage: ContentPage
{
public LoginPage() { // create controls here }
public btnLogin_Clicked(object sender, EventArgs e){
Navigation.PopAsync(); // remove this page (doesn't work)
Navigation.PushAsync(new HomePage());
}
}
public class App : Application
{
public App()
{
MainPage = new NavigationPage(new LoginPage());
}
}
答案 0 :(得分:6)
Xamarin.Forms 1.3添加了添加和删除页面的功能,如您所建议的那样重置导航堆栈的根目录。您的代码表明您使用的是至少1.3版。但是,直接调用PopAsync()不是您想要使用的方法,因为如果它是堆栈中唯一的页面,它将不会弹出页面。而是首先使用INavigation接口的InsertPageBefore(newPage,pageToPutBefore)方法,然后在堆栈末尾弹出登录页面。
您可以尝试与此类似的代码:
public async void btnLogin_Clicked(object sender, EventArgs e)
{
// Do some login logic and if successful ...
Navigation.InsertPageBefore(new HomePage(), this);
await Navigation.PopAsync().ConfigureAwait(false);
}
Xamarin.Forms 1.3中有几种新方法可以大大提高导航功能。上述问题的另一个可能的解决方案是首先将HomePage添加到堆栈的末尾,然后使用新的RemovePage方法从堆栈的开头删除登录页面,使HomePage成为唯一的页面。有一件事你要小心,如果你使用像PushAsync这样的异步方法添加新页面,你需要等待调用以确保在删除旧页面之前将新页面添加到堆栈中。
答案 1 :(得分:2)
又一个解决方案:更改MainPage
属性
:
公共应用() { MainPage = new LoginPage(); }
:
Device.BeginInvokeOnMainThread(() =>
{
Application.Current.MainPage = new NavigationPage(new HomePage());
});
答案 2 :(得分:0)
对于您的第二点,登录页面的后退箭头显示,您不希望>>
使用此NavigationPage.SetHasBackButton(YourPage,false); 这将从导航栏中删除后退按钮
作为上述代码的示例,
HomePage myHomePage = new HomePage();
NavigationPage.SetHasNavigationBar(myHomePage , false);
Navigation.PushAsync(myHomePage);
你可以探索更多的NavigationPage方法 - 比如SetHasNavigationBar等等,它们真的很棒。
如果有帮助,请告诉我。