Xamarin.Forms将点击单元格时的橙色ListView背景颜色更改为白色或透明

问题描述 投票:0回答:1

我找不到有关此橙色的解决方案?我需要编写渲染器,还是可以从Android和IOS中的资源进行更改?

xamarin.forms xamarin.android xamarin.ios
1个回答
0
投票

是,如果要更改ListView selecteditem背景颜色,则需要使用自定义渲染在Xamarin.Forms中进行此操作。

在PCL中,创建一个类名称为ExtendedViewCell,它应该继承任何ViewCell。

public class ExtendedViewCell : ViewCell
{
    public static readonly BindableProperty SelectedBackgroundColorProperty =
        BindableProperty.Create("SelectedBackgroundColor",
                                typeof(Color),
                                typeof(ExtendedViewCell),
                                Color.Default);

    public Color SelectedBackgroundColor
    {
        get { return (Color)GetValue(SelectedBackgroundColorProperty); }
        set { SetValue(SelectedBackgroundColorProperty, value); }
    }
}

在Android项目中,将类名创建为ExtendedViewCellRenderer,并确保在名称空间上方为我们的ExtendedViewCell类添加渲染器注册。

[assembly: ExportRenderer(typeof(ExtendedViewCell), typeof(ExtendedViewCellRenderer))]
namespace demo3.Droid
{
public class ExtendedViewCellRenderer : ViewCellRenderer
{

    private Android.Views.View _cellCore;
    private Drawable _unselectedBackground;
    private bool _selected;

    protected override Android.Views.View GetCellCore(Cell item,
                                                      Android.Views.View convertView,
                                                      ViewGroup parent,
                                                      Context context)
    {
        _cellCore = base.GetCellCore(item, convertView, parent, context);

        _selected = false;
        _unselectedBackground = _cellCore.Background;

        return _cellCore;
    }

    protected override void OnCellPropertyChanged(object sender, PropertyChangedEventArgs args)
    {
        base.OnCellPropertyChanged(sender, args);

        if (args.PropertyName == "IsSelected")
        {
            _selected = !_selected;

            if (_selected)
            {
                var extendedViewCell = sender as ExtendedViewCell;
                _cellCore.SetBackgroundColor(extendedViewCell.SelectedBackgroundColor.ToAndroid());
            }
            else
            {
                _cellCore.SetBackground(_unselectedBackground);
            }
        }
    }
}
}

然后您可以为列表视图SelectedBackgroundColor设置颜色。

  <ListView ItemsSource="{Binding students}">
            <ListView.ItemTemplate>
                <DataTemplate>

                    <local:ExtendedViewCell SelectedBackgroundColor="White">
                        <StackLayout Orientation="Horizontal">
                            <Label Text="{Binding Username}" TextColor="Yellow" />
                            <Label Text="{Binding Age}" TextColor="Blue" />
                        </StackLayout>
                    </local:ExtendedViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

更多细节信息,并在iOS平台的步骤,你可以去看看:

https://blog.wislon.io/posts/2017/04/11/xamforms-listview-selected-colour

更新:

在ios项目中,将类名创建为ExtendedViewCellRenderer,并确保在名称空间上方为我们的ExtendedViewCell类添加渲染器注册。

 [assembly: ExportRenderer(typeof(ExtendedViewCell), typeof(ExtendedViewCellRenderer))]
 namespace xamformsdemo.iOS
 {
    public class ExtendedViewCellRenderer : ViewCellRenderer
{
    public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
    {
        var cell = base.GetCell(item, reusableCell, tv);
        var view = item as ExtendedViewCell;
        cell.SelectedBackgroundView = new UIView
        {
            BackgroundColor = view.SelectedBackgroundColor.ToUIColor(),
        };

        return cell;
    }

}
 }
© www.soinside.com 2019 - 2024. All rights reserved.