Xamarin.Forms iOS listview选择项目颜色

时间:2017-07-12 14:56:56

标签: c# ios listview xamarin.ios xamarin.forms

我需要在我的Xamarin.Forms应用中更改列表视图的所选项目颜色。 所以我创建了一个自定义渲染器......

PCL C#:

public class DarkViewCell : ViewCell {}

PCL XAML:

<ListView>
  <ListView.ItemTemplate>
    <DataTemplate>
      <local:DarkViewCell>
        <ViewCell.View>
          ... Stuff ...
        </ViewCell.View>
      </local:DarkViewCell>            
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>

的iOS

public class DarkViewCellRenderer : ViewCellRenderer
{
    private UIView bgView;

    public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
    {
        var cell = base.GetCell(item, reusableCell, tv);

        cell.BackgroundColor = UIColor.Black;
        cell.TextLabel.TextColor = UIColor.White;

        if (bgView == null)
        {
            bgView = new UIView(cell.SelectedBackgroundView.Bounds);
            bgView.Layer.BackgroundColor = UIColor.FromRGB(48,48,48).CGColor;
            bgView.Layer.BorderColor = UIColor.FromRGB(48, 48, 48).CGColor;
            bgView.Layer.BorderWidth = 2.0f;
        }

        cell.SelectedBackgroundView = bgView;

        return cell;
    }
}

但是没有用。我也尝试改变SelectionStyle,但没有......

修改

在一个新项目中它起作用。代码是相同的

4 个答案:

答案 0 :(得分:1)

我不是百分百肯定,但是,我删除了

<x:Arguments>
    <ListViewCachingStrategy>RecycleElement</ListViewCachingStrategy>
</x:Arguments>

它开始工作了。

答案 1 :(得分:0)

尝试设置:

public override UITableViewCell GetCell(Cell item, UITableView tv)
{
    var cell = base.GetCell(item, tv);
    cell.SelectedBackgroundView = new UIView() { BackgroundColor = UIColor.Black };
    return cell;
}

<强>更新 我只是在虚拟项目中使用了你的代码,它可以正常工作。您是否添加了程序集属性以注册自定义渲染器?

[assembly: ExportRenderer(typeof(DarkViewCell), typeof(DarkViewCellRenderer))]
namespace MyProject.iOS
{
    public class DarkViewCellRenderer : ViewCellRenderer
    {
    }
}

答案 2 :(得分:0)

我最近遇到过类似的问题,我发现设置单元格背景颜色的最佳方法是使用单元格ContentView

尝试在GetCell方法

中使用以下内容
cell.ContentView.BackgroundColor = UIColor.Black;

答案 3 :(得分:0)

按照以下代码为我工作

 public override UITableViewCell GetCell(Cell item, UITableView tv)
  {
    var cell = base.GetCell(item, tv);

     cell.SelectedBackgroundView = new UIView {
     BackgroundColor = UIColor.DarkGray,
   };
  return cell;
 }

以下链接对您有用

Xamarin.Forms ListView: Set the highlight color of a tapped item