我有一个登录页面,它是我的应用程序的起点。此页面的导航栏隐藏有以下代码:
NavigationPage.SetHasNavigationBar(this, false);
从登录页面我使用以下代码启动仪表板页面:
Navigation.PushAsync(new Dashboard());
我在登录页面的两个单独位置执行此操作。第一个位置是登录页面的内部构造函数,我检查活动用户会话,第二个位置是处理按钮点击登录的内部方法。
所以我这样打电话给Navigation.PushAsync()
:
public Login()
{
NavigationPage.SetHasNavigationBar(this, false);
InitializeComponent();
var loginSession = App.DataService.CheckUserSession();
if(loginSession != null)
{
Navigation.PushAsync(new Dashboard());
}
}
第二种方式:
public void OnLogin(object o, EventArgs e)
{
Navigation.PushAsync(new Dashboard());
}
这就是事情开始变得奇怪的地方。如果我点击按钮打开我的Dasboard页面(使用第二个例子),Dasboard页面会正常加载并拥有它自己的NavigationBar。但是,每当我找到用户会话时打开Dasboard页面(使用第一种方式),我的Dasboard页面将缺少NavigationBar。更糟糕的是,如果我从Dasboard页面导航到另一个页面(比如说设置),然后返回到Dasboard,导航栏将在Dasboard页面上正常工作。我尝试删除隐藏登录页面NavigationPage.SetHasNavigationBar(this, false);
上的导航栏的代码
这样做的是登录页面会显示它的导航栏,但在导航到仪表板时(使用第一种方式),导航栏将保持与登录页面相同。
我可能想知道问题是否在于我的所有页面(登录,仪表板和设置)都是ContentPage
的孩子并且必须从NavigationPage
继承?
此时我对NavigationBar
发生的事情感到非常困惑。
答案 0 :(得分:2)
这是因为正在从Login构造函数中推送Dashboard页面。相反,覆盖OnAppearing()
并在那里执行:
protected override async void OnAppearing()
{
base.OnAppearing();
await Navigation.PushAsync(new Dashboard());
}
此外,您的子页面应该从ContentPage继承,因为嵌套NavigationPages可能会导致其他问题:)