在Xamarin.Forms中ListView是非常常用的控件之一,ListView有一個默認的選中效果,顏色和自己的App很不搭,怎么辦呢?
1. 在很多時候,ListView在使用中不需要選中,更多情況下,只是點擊一下而已,那么我們可以將其SelectMode設置為None。
<ListView BackgroundColor="Transparent" temsSource="{Binding PasswordList}" RowHeight="96" Margin="12" SelectionMode="None" ItemTapped="ListView_ItemTapped" SeparatorVisibility="None" SeparatorColor="Transparent"/>
2. 如果需要修改選中效果顏色怎么處理呢?
首先,自定義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); } } }
然后,根據各個平台為ExtendedViewCell提供一個Renderer(ExtendedViewCellRenderer);
Android:

[assembly: ExportRenderer(typeof(ExtendedViewCell), typeof(ExtendedViewCellRenderer))] namespace Deom.Droid.CustomRenderers { 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); } } } } }
iOS:

[assembly: ExportRenderer(typeof(ExtendedViewCell), typeof(ExtendedViewCellRenderer))] namespace Demo.iOS.CustomRenderers { 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; } } }
這樣就能修改選中效果啦。