Xamarin.ios 如何在Xamarin.Forms中更改MasterDetailPage Actiobar的背景色,它将反映在所有平台上?

Xamarin.ios 如何在Xamarin.Forms中更改MasterDetailPage Actiobar的背景色,它将反映在所有平台上?,xamarin.ios,xamarin.android,xamarin.forms,portable-class-library,Xamarin.ios,Xamarin.android,Xamarin.forms,Portable Class Library,你好,我是Xamarin开发的新手,目前正在从事PCL项目。 我使用MasterDetailsPage概念实现了导航抽屉。它工作得很好。 但我面临的问题是MasterDetailsPage将带有蓝色的操作栏和菜单图标来打开/关闭导航抽屉。我需要用黑色覆盖它。请提出一些建议。 我提到了我目前使用的代码。 还有,出现了空白,我想把它去掉。 在下面的URl中,他们提到了一些方法,因为我是新手,无法为每个平台编写CustomRenderer。 请告诉我如何编写自定义渲染器来删除空白以及更改工具栏的颜色

你好,我是Xamarin开发的新手,目前正在从事PCL项目。 我使用MasterDetailsPage概念实现了导航抽屉。它工作得很好。 但我面临的问题是MasterDetailsPage将带有蓝色的操作栏和菜单图标来打开/关闭导航抽屉。我需要用黑色覆盖它。请提出一些建议。 我提到了我目前使用的代码。 还有,出现了空白,我想把它去掉。 在下面的URl中,他们提到了一些方法,因为我是新手,无法为每个平台编写CustomRenderer。

请告诉我如何编写自定义渲染器来删除空白以及更改工具栏的颜色

代码:

我的XAML文件:

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:WYH_XAMARIN.MasterDetailPageNavigation"
             x:Class="WYH_XAMARIN.MasterDetailPageNavigation.NavigationDrawerPage">

  <MasterDetailPage.Master>
    <ContentPage Title="Menu"
                 BackgroundColor="#e8e8e8">

      <StackLayout Orientation="Vertical">

        <!-- 
             This StackLayout you can use for other
             data that you want to have in your menu drawer
        -->
        <StackLayout BackgroundColor="#e74c3c"
                     HeightRequest="75">

          <Label Text="Some Text title"
                 FontSize="20"
                 VerticalOptions="CenterAndExpand"
                 TextColor="White"
                 HorizontalOptions="Center"/>
        </StackLayout>

        <ListView x:Name="navigationDrawerList"
                  RowHeight="60"
                  SeparatorVisibility="None"
                  BackgroundColor="#e8e8e8"
                  ItemSelected="OnMenuItemSelected">

          <ListView.ItemTemplate>
            <DataTemplate>
              <ViewCell>

                <!-- Main design for our menu items -->
                <StackLayout VerticalOptions="FillAndExpand"
                             Orientation="Horizontal"
                             Padding="20,10,0,10"
                             Spacing="20">

                  <Image Source="{Binding Icon}"
                         WidthRequest="40"
                         HeightRequest="40"
                         VerticalOptions="Center" />

                  <Label Text="{Binding Title}"
                         FontSize="Medium"
                         VerticalOptions="Center"
                         TextColor="Black"/>
                </StackLayout>
              </ViewCell>
            </DataTemplate>
          </ListView.ItemTemplate>
        </ListView>
      </StackLayout>

    </ContentPage>
  </MasterDetailPage.Master>

  <MasterDetailPage.Detail>

    <NavigationPage>

    </NavigationPage>
  </MasterDetailPage.Detail>
</MasterDetailPage>

我的类文件是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WYH_XAMARIN.PojoClasses;
using Xamarin.Forms;

namespace WYH_XAMARIN.MasterDetailPageNavigation
{
    public partial class NavigationDrawerPage : MasterDetailPage
    {
        LoginSuccessfullResponse loginSuccessResponse;
        public List<MasterPageItem> menuList { get; set; }

        public NavigationDrawerPage()
        {

            InitializeComponent();

            NavigationPage.SetHasNavigationBar(this, false);

            menuList = new List<MasterPageItem>();

            // Creating our pages for menu navigation
            // Here you can define title for item, 
            // icon on the left side, and page that you want to open after selection
            var page1 = new MasterPageItem() { Title = "My Profile", Icon = "icon.png", TargetType = typeof(TestPage1) };
            var page2 = new MasterPageItem() { Title = "Service Booking", Icon = "icon.png", TargetType = typeof(TestPage2) };
            var page3 = new MasterPageItem() { Title = "Item 3", Icon = "icon.png", TargetType = typeof(TestPage3) };

            // Adding menu items to menuList
            menuList.Add(page1);
            menuList.Add(page2);
            menuList.Add(page3);

            // Setting our list to be ItemSource for ListView in MainPage.xaml
            navigationDrawerList.ItemsSource = menuList;

            // Initial navigation, this can be used for our home page
            Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(TestPage1)));
        }

        public NavigationDrawerPage(LoginSuccessfullResponse loginSuccessResponse)
        {
            this.loginSuccessResponse = loginSuccessResponse;

            InitializeComponent();

            NavigationPage.SetHasNavigationBar(this, false);

            menuList = new List<MasterPageItem>();

            // Creating our pages for menu navigation
            // Here you can define title for item, 
            // icon on the left side, and page that you want to open after selection
            var page1 = new MasterPageItem() { Title = "My Profile", Icon = "icon.png", TargetType = typeof(TestPage1) };
            var page2 = new MasterPageItem() { Title = "Service Booking", Icon = "icon.png", TargetType = typeof(TestPage2) };
            var page3 = new MasterPageItem() { Title = "Item 3", Icon = "icon.png", TargetType = typeof(TestPage3) };

            // Adding menu items to menuList
            menuList.Add(page1);
            menuList.Add(page2);
            menuList.Add(page3);

            // Setting our list to be ItemSource for ListView in MainPage.xaml
            navigationDrawerList.ItemsSource = menuList;

            // Initial navigation, this can be used for our home page
            Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(TestPage1)));
        }

        // Event for Menu Item selection, here we are going to handle navigation based
        // on user selection in menu ListView
        private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e)
        {

            var item = (MasterPageItem)e.SelectedItem;
            Type page = item.TargetType;

            Detail = new NavigationPage((Page)Activator.CreateInstance(page));
            IsPresented = false;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用WYH_XAMARIN.PojoClasses;
使用Xamarin.Forms;
命名空间WYH_XAMARIN.MasterDetailPageNavigation
{
公共部分类导航抽屉页:MasterDetailPage
{
LoginsAccessFullResponse LoginsAccessResponse;
公共列表菜单列表{get;set;}
公共导航抽屉页()
{
初始化组件();
SetHasNavigationBar(这个,false);
menuList=新列表();
//创建菜单导航页面
//在这里您可以定义项目的标题,
//左侧的图标,以及选择后要打开的页面
var page1=new MasterPageItem(){Title=“My Profile”,Icon=“Icon.png”,TargetType=typeof(TestPage1)};
var page2=new MasterPageItem(){Title=“Service Booking”,Icon=“Icon.png”,TargetType=typeof(TestPage2)};
var page3=new MasterPageItem(){Title=“Item 3”,Icon=“Icon.png”,TargetType=typeof(TestPage3)};
//向菜单列表添加菜单项
菜单列表添加(第1页);
菜单列表添加(第2页);
菜单列表添加(第3页);
//将列表设置为MainPage.xaml中ListView的ItemSource
navigationDrawerList.ItemsSource=menuList;
//初始导航,这可以用于我们的主页
Detail=newNavigationPage((Page)Activator.CreateInstance(typeof(TestPage1));
}
公共导航抽屉页面(LoginSAccessFullResponse LoginSAccessResponse)
{
this.loginsAccessResponse=loginsAccessResponse;
初始化组件();
SetHasNavigationBar(这个,false);
menuList=新列表();
//创建菜单导航页面
//在这里您可以定义项目的标题,
//左侧的图标,以及选择后要打开的页面
var page1=new MasterPageItem(){Title=“My Profile”,Icon=“Icon.png”,TargetType=typeof(TestPage1)};
var page2=new MasterPageItem(){Title=“Service Booking”,Icon=“Icon.png”,TargetType=typeof(TestPage2)};
var page3=new MasterPageItem(){Title=“Item 3”,Icon=“Icon.png”,TargetType=typeof(TestPage3)};
//向菜单列表添加菜单项
菜单列表添加(第1页);
菜单列表添加(第2页);
菜单列表添加(第3页);
//将列表设置为MainPage.xaml中ListView的ItemSource
navigationDrawerList.ItemsSource=menuList;
//初始导航,这可以用于我们的主页
Detail=newNavigationPage((Page)Activator.CreateInstance(typeof(TestPage1));
}
//事件选择菜单项,这里我们将处理基于导航的
//菜单列表视图中的用户选择
选定菜单项上的私有void(对象发送方,SelectedItemChangedEventArgs e)
{
var item=(MasterPageItem)e.SelectedItem;
类型页面=item.TargetType;
Detail=newNavigationPage((Page)Activator.CreateInstance(Page));
IsPresented=假;
}
}
}
伙计们,请帮我解决这个问题。 任何示例代码或工作教程都会有所帮助。 提前谢谢

但我面临的问题是MasterDetailsPage将配备蓝色的操作栏和菜单图标,用于打开/关闭导航抽屉

更改
ActionBar
颜色无需进行客户渲染 尝试使用

Detail=newnavigationpage((Page)Activator.CreateInstance(typeof(MainPage)){BarBackgroundColor=Color.Red}

出现空白

我没有复制您的问题,我的母版详细信息页没有写行工作良好。你可以参考

通过检查您提供的链接的答案。我已经在android项目中创建了客户呈现的
MarstDetialPage

[assembly: ExportRenderer(typeof(MasterDetailPage), typeof(CustomMasterDetailRenderer))]
namespace MasterDetialPage_MyTest.Droid
{
    public class CustomMasterDetailRenderer : MasterDetailPageRenderer
    {
        public override void AddView(Android.Views.View child)
        {
            child.GetType().GetRuntimeProperty("TopPadding").SetValue(child, 0);
            var padding = child.GetType().GetRuntimeProperty("TopPadding").GetValue(child);

            base.AddView(child);
        }
    }
}
它将在没有通知栏的情况下进入屏幕

注意:我只在android平台上测试过它