如何在Xamarin Forms中更改`ListView`中`TextCell`的背景颜色?

时间:2017-05-05 08:10:40

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

我的ListView设置如下:

<ListView HasUnevenRows="true" BackgroundColor="Gray">
    <ListView.Header>
        <StackLayout Padding="20,35,20,10" Orientation="Horizontal" HorizontalOptions="FillAndExpand">
            <Label FontSize="13" TextColor="Gray" Text="Header text here"/>
        </StackLayout>
    </ListView.Header>
    <ListView.ItemTemplate>
        <ListView.DataTemplate>
            <TextCell Text="{Binding CategoryName}" Detail="{Binding Count}">
        </ListView.DataTemplate>
    </ListView.ItemTemplate>
</ListView>

我有iOS渲染器并设置以下内容:

public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
{
    var cell = base.GetCell(item, reusableCell, tv);
    cell.BackgroundColor = UIColor.Red;
    return cell;
}

不知怎的,我的整个ListView正在使用我为listview设置的Gray背景。我想要发生的是Gray的{​​{1}}颜色背景(这意味着标题部分将具有灰色背景)并且ListView具有Red颜色背景。我是否设置了错误的属性以获得TextCell的所需背景?

2 个答案:

答案 0 :(得分:2)

您的自定义渲染器实际上并未返回单元格,因此您对BackgroundColor所做的更改无法完成。

public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
{
    var cell = base.GetCell(item, reusableCell, tv);        
    cell.ContentView.BackgroundColor = UIColor.Red;
    return cell;
}

更新:您应该设置cell.ContentView.BackgroundColor

答案 1 :(得分:0)

在Grid / StackLayout中添加文本单元并指定BackgroundColor="Red"  直接在xaml中进行相应的布局。您不需要为此编写自定义渲染器。