我需要在我的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,但没有......
修改
在一个新项目中它起作用。代码是相同的
答案 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