Xamarin.forms 表单将轻敲单元格上的橙色ListView背景颜色更改为白色或透明
我找不到解决这个橙色问题的办法?我需要编写渲染器还是可以从Android和IOS中的资源中进行更改?是的,如果要更改ListView selecteditem背景色,需要在Xamarin.Forms中使用自定义渲染来完成此操作 在PCL中,创建一个类名ExtendedViewCell,它应该继承任何ViewCellXamarin.forms 表单将轻敲单元格上的橙色ListView背景颜色更改为白色或透明,xamarin.forms,xamarin.android,xamarin.ios,Xamarin.forms,Xamarin.android,Xamarin.ios,我找不到解决这个橙色问题的办法?我需要编写渲染器还是可以从Android和IOS中的资源中进行更改?是的,如果要更改ListView selecteditem背景色,需要在Xamarin.Forms中使用自定义渲染来完成此操作 在PCL中,创建一个类名ExtendedViewCell,它应该继承任何ViewCell public class ExtendedViewCell : ViewCell { public static readonly BindableProperty Sele
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);
}
}
}
}
}
[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;
}
}
}
然后可以为listview 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>
将ListView的SelectionMode设置为None!!!这回答了你的问题吗?IOS的解决方案?请在回复时查看我的更新,如果您有其他问题,我建议您可以查看这篇文章:@Rajzer是的,Microsoft关于自定义渲染的文章也建议我们这样做:我们可以在所有xamarin.forms组件上创建自定义渲染器?通过这种方式,如果我设置CachingStrategy=“RetainElement”,选定的背景颜色将具有奇怪的行为。例如,我选择了一个项目,当时的背景是正确的。然后,如果我向下和向上滚动列表,背景颜色将恢复为默认颜色(橙色),许多其他项目的背景颜色将是我在“ExtendedViewCellRenderer”中设置的颜色。