Похоже, что есть на самом деле кросс-platfor m способ сделать это, что работает как на iOS, так и на Android (не уверен в Windows). Он использует только привязку и не требует специальных рендерингов (что кажется редким). Это - размытие множества поисковых запросов, поэтому спасибо всем, кого я мог бы заимствовать у ...
Я принимаю ViewCells, но это должно работать и для ячеек Text или Image. Я только в том числе соответствующий код здесь помимо типичного текста, изображения и т.д.
На странице сделать что-то вроде этого:
MyModel model1 = new MyModel();
MyModel model2 = new MyModel();
ListView list = new ListView
{
ItemsSource = new List<MyModel> { model1, model2 };
ItemTemplate = new DataTemplate(typeof(MyCell))
};
Ваш заказ Модель может выглядеть примерно так:
public class MyModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private Color _backgroundColor;
public Color BackgroundColor
{
get { return _backgroundColor; }
set
{
_backgroundColor = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("BackgroundColor"));
}
}
}
public void SetColors(bool isSelected)
{
if (isSelected)
{
BackgroundColor = Color.FromRgb(0.20, 0.20, 1.0);
}
else
{
BackgroundColor = Color.FromRgb(0.95, 0.95, 0.95);
}
}
}
Тогда для ItemTemplate вам нужен пользовательский класс клетка что-то вроде этого:
public class MyCell : ViewCell
{
public MyCell() : base()
{
RelativeLayout layout = new RelativeLayout();
layout.SetBinding(Layout.BackgroundColorProperty, new Binding("BackgroundColor"));
View = layout;
}
}
Затем в обработчике событий ItemSelected сделайте следующее. Обратите внимание, что «selected» - это экземпляр MyModel, используемый для отслеживания выбранного в данный момент элемента. Я только показываю цвет фона здесь, но я также использую эту технику для обратного выделения цвета текста и деталей текста.
private void ItemSelected(object sender, ItemTappedEventArgs args)
{
// Deselect previous
if (selected != null)
{
selected.SetColors(false);
}
// Select new
selected = (list.SelectedItem as MyModel);
selected.SetColors(true);
}
У меня есть скриншоты из оба прошивки и Android, если кто-то хочет, чтобы поднять меня на 10 очков, так что я могу на самом деле отправить их :)
Если установка цвета фона не работает для существующих UIView попробуйте вызвать SetNeedsLayout ячейки (или независимо от того, какой метод был вызван) после установки цвета фона. UITableView пытается не выполнять компоновку, когда это возможно –
@StenPetrov: Нет, '' SetNeedsDisplay''' или '' SetNeedsLayout''' не работает. Но это не имеет особого значения, поскольку присвоение '' '' нового UIView {...} '' 'довольно короткое временное решение. – Falko
И как изменить цвет шрифта? – Edgar