为什么导航栏在某些设备上的Xamarin.Forms中不会改变颜色?

时间:2017-03-23 10:49:26

标签: xamarin xamarin.android xamarin.forms navigationbar master-detail

我正在构建一个Xamarin Forms应用程序,目前在Android上。

我正在尝试动态更改应用顶部导航栏的颜色。我使用锁定到Android 4.1 API 17的旧手机成功管理了这个,但我尝试了所有其他手机,因为它不起作用。我试过了:

Samsung SM-G388F - Android 5.1 API 22

Google Pixel - Android 7.1 API 25

Screenshot - Newer phones - does not work - simply inherits page background colour

Screenshot - Older phone - works perfectly

最初我使用App.xaml中定义的DynamicResource来更改BarBackgroundColour,具体取决于您使用的环境 - 实时/测试。另外两个属性BackgroundColor和BarTextColor工作正常。

 <Color x:Key="navBarColour">#F4721C</Color>
  <Style TargetType="NavigationPage">
            <Setter Property="BackgroundColor" Value="{StaticResource pageBackground}"/>
            <Setter Property="BarBackgroundColor" x:Key="navBar" Value="{DynamicResource navBarColour}"/>
            <Setter Property="BarTextColor" Value="{StaticResource textColor}"/>

        </Style>

在App.xaml.cs中设置App Load

    if (Settings.Environment.ToLower() == "live")
        {
            Application.Current.Resources["navBarColour"] = Application.Current.Resources["anglianLightBlue"];
        }
        else
        {
            Application.Current.Resources["navBarColour"] = Application.Current.Resources["red"];
        }

用户还可以在“设置”页面上切换环境:

                App.Current.Resources["navBarColour"] = App.Current.Resources["red"];

我尝试将其更改为StaticResource并尝试将其直接设置在我的xaml中,只是Color.Black,它仍然无法正常工作 - 我似乎无法找到方法在任何地方改变它。

我在谷歌上找不到任何关于此问题或任何有类似问题的人。 有没有其他人经历过这个,如果有的话他们是如何解决这个问题

1 个答案:

答案 0 :(得分:3)

我没有找到为什么这不起作用,但我确实找到了解决方法。 NavigationBar继承页面背景颜色,因此通过将页面背景更改为您想要的条形颜色,然后在其余内容周围粘贴容器(ScrollView / ContentView)并为容器的背景着色页面背景颜色,这给出了所需的效果。 我仍然想知道为什么这不起作用,但现在这是一个合适的解决方法。