为什么在使用 Prism 导航到 Xamarin.Forms 中的根目录时,我的 NavigationPage 顶部会出现默认值 header?

Why do I get the default header at the top of my NavigationPage, when navigating to root in Xamarin.Forms with Prism?

我有一个用 Xamarin.Forms 编写的 iOS 应用程序,它使用 Prism NavigationService 进行导航。当用户按下注销按钮时,导航 returns 到登录屏幕。多次执行此操作后,header 再次出现。

我一直在使用代码

在每个屏幕上抑制 NavigationPage header
NavigationPage.SetHasNavigationBar(this, false);

这最初有效。然而,它在弹出导航堆栈几次后停止工作。

在发生这种情况的登录页面上,我也尝试在 XAML 中添加以下内容,结果相同。

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             xmlns:local="clr-namespace:BIMSMobile.ViewModels"
             NavigationPage.HasNavigationBar="False"
             x:Class="BIMSMobile.Views.LoginPage">
    <ContentPage.Content>
...

我抑制了 NavigationPage header 以支持具有注销按钮的自定义视图。 注销按钮具有以下处理程序:

        protected void OnLogoutClicked(object sender, EventArgs e)
        {
                SessionHelper.Instance.SignOutUser();
        }

在 SessionHelper 中,我执行以下操作:

await NavigationService.NavigateAsync("NavigationPage/LoginPage");

蓝色 header 在应用程序打开时被抑制,并在前几次后退导航(弹出)中保持不变。我希望情况永远如此。但是在第二次注销后默认 header 重新出现,将我的其余内容向下推到屏幕上。

显然这不是由 Navigation 或代码中错误调用 SetHasNavigationBar 引起的。这是由资源中的样式引起的:\ 我的修复如下。

       <Style TargetType="NavigationPage">
            <Setter Property="HasNavigationBar" Value="False" />
       </Style>