Xamarin形成更改导航栏的背景颜色

时间:2015-01-18 10:21:20

标签: c# xamarin.forms

我正在使用Xamarin.Forms并尝试更改iOS上导航栏的背景颜色。

我有一个继承自NavigationPage的自定义导航栏类​​,带有可绑定属性和构造函数,用于设置导航栏的颜色。根据我的理解,导航栏上面有一个默认的背景(黑色)Xamarin.Forms导航背景。我可以使用SetColor()方法设置背景颜色(见下文)。然而,它留下了一条黑线,这是导航栏(iOS)的背景,如图所示。 Picture Link

现在,我正在尝试将iOS导航栏背景颜色设置为白色或透明。我花了很多时间但没有任何效果。有人可以协助如何将背景设置为白色。

//PCL class
public class CustomNavigationalPage : NavigationPage
{
    public  static readonly BindableProperty BarBgColorProperty = 
        BindableProperty.
        Create<CustomNavigationalPage, UIColor>  
            (p => p.BarBackgroundColorR, null);

    public UIColor BarBackgroundColorR
    {
        get { return (UIColor)base.GetValue (BarBgColorProperty); }
        set { base.SetValue (BarBgColorProperty, value); }
    }

    public NavigationalPageCustomized() : base()
    {
        SetColor();
    }

    void SetColor()
    {
        BarBackgroundColor = Color.Transparent; 
        BarTextColor = Color.Blue;
    }
}

导航栏渲染器类:

[assembly: ExportRenderer (typeof (CustomNavigationalPage), typeof (CustomNavigationPageRenderer))]

 namespace project.iOS
 {
     public class CustomNavigationPageRenderer : NavigationRenderer
     {
         public CustomNavigationPageRenderer()
         {
             // UINavigationBar.Appearance.SetBackgroundImage (UIImage.FromFile ("navbg.png"), UIBarMetrics.Default);
         }

         protected override void OnElementChanged (VisualElementChangedEventArgs args)
         {
             base.OnElementChanged (args);

             var nb = (NavigationalPageCustomized) Element;

             if (nb != null) 
             { 
                 nb.BarBackgroundColorR = UIColor.White;
             }
         }
     }
  }

6 个答案:

答案 0 :(得分:9)

Xamarin.forms PCL 中试用此代码。更改以下代码     App.xaml.cs的构造函数。

public App()
{
    MainPage = new NavigationPage(new Page1())
    {
        BarBackgroundColor = Color.Gray
    };
}

答案 1 :(得分:3)

尝试以下代码。祝你好运

[assembly: ExportRenderer (typeof (CustomNavigationalPage), typeof (CustomNavigationPageRenderer))]

namespace project.iOS
{
  public class CustomNavigationPageRenderer : NavigationRenderer
  {
      public CustomNavigationPageRenderer()
      {

      }
      public override void ViewDidLoad ()
      {
          base.ViewDidLoad ();
          //Background image
          this.NavigationBar.BarTintColor = UIColor.FromPatternImage (UIImage.FromFile ("AnyResourceImage.png"));
          //Your desire color
          this.NavigationBar.BarTintColor = UIColor.Red; 
          //Right item color
          this.NavigationBar.TopItem.RightBarButtonItem.TintColor = UIColor.FromPatternImage (UIImage.FromFile ("AnyResourceImage.png"));
          //Left item color
          this.NavigationBar.TopItem.LeftBarButtonItem.TintColor = UIColor.Black;
      }
   }
}

//Note : Please remove any background color you set in forms shared or pcl project. Hint in this class > CustomNavigationalPage

答案 2 :(得分:2)

这曾经需要自定义渲染器,但在XF 1.3中不再需要。 NavigationPage现在具有BarBackgroundColor和BarTextColor属性,这些属性似乎运行良好。不幸的是,没有自定义渲染器(我已经找到),没有能力更改字体。

答案 3 :(得分:2)

您可以在全局App.xaml文件中进行设置

<Style TargetType="NavigationPage">
       <Setter Property="BarBackgroundColor" Value="Blue"/>
       <Setter Property="BarTextColor" Value="White"/>
</Style>

更改为自己的颜色

答案 4 :(得分:0)

对我来说,这很不错:

(App.Current.MainPage as NavigationPage).BarBackgroundColor = Color.FromHex("#4388CC");

我已将此代码放入页面的ViewModel的构造函数中。

希望这对您也有用。

答案 5 :(得分:-1)

NavigationController.NavigationBar.TitleTextAttributes = new UIStringAttributes(){ForegroundColor = UIColor.White};