为啥在使用 Prism 在 Xamarin.Forms 中导航到 root 时,我的 NavigationPage 顶部会出现默认标题?

Posted

技术标签:

【中文标题】为啥在使用 Prism 在 Xamarin.Forms 中导航到 root 时,我的 NavigationPage 顶部会出现默认标题?【英文标题】:Why do I get the default header at the top of my NavigationPage, when navigating to root in Xamarin.Forms with Prism?为什么在使用 Prism 在 Xamarin.Forms 中导航到 root 时,我的 NavigationPage 顶部会出现默认标题? 【发布时间】:2020-03-02 03:41:21 【问题描述】:

我有一个用 Xamarin.Forms 编写的 ios 应用程序,它使用 Prism NavigationService 进行导航。当用户按下注销按钮时,导航将返回登录屏幕。多次执行此操作后,标题会重新出现。

我一直在使用代码抑制每个屏幕上的 NavigationPage 标题

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 标头以支持具有注销按钮的自定义视图。 注销按钮具有以下处理程序:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于为啥在使用 Prism 在 Xamarin.Forms 中导航到 root 时,我的 NavigationPage 顶部会出现默认标题?的主要内容,如果未能解决你的问题,请参考以下文章

华为笔记本为啥安装不了graphpad prism8破解版?

华为笔记本为啥安装不了graphpad prism8破解版?

prism9的补丁为啥会出不来

如何手动安装Xamarin与Xamarin for VisualStudio

如何在使用 Xamarin for Visual Studio 的真实 Android 设备上进行调试?

使用 ZXing Xamarin for iOS 的条形码扫描仪应用程序在应用程序类中遇到空引用错误