Отключаем выделение выбранного элемента ListView с использованием эффектов в Xamarin Forms
ListView в Xamarin.Forms - это эффектный способ отображения повторяющихся элементов одинакового формата. Типичное применение включает какое-то взаимодействие с пользователем, например выбрать один элемент, а затем перейти на новый экран.
В этой статье мы рассмотрим возможность отключения выделения для элементов списка. Хотя это просто в UWP, с использованием SelectionMode
, Xamarin.Forms не предоставляет аналогичную функциональность из коробки (пока!), из-за различия способов, которым каждая платформа обрабатывает списки. К счастью, благодаря нашему хорошему другу PlatformEffect, реализовать эту функциональности - просто!
Начнем с эффекта в iOS проекте:
[assembly: ResolutionGroupName("MyEffects")]
[assembly: ExportEffect(typeof(ListViewHighlightEffect), nameof(ListViewHighlightEffect))]
namespace Effects.iOS.Effects
{
public class ListViewHighlightEffect : PlatformEffect
{
protected override void OnAttached()
{
var listView = (UIKit.UITableView)Control;
listView.AllowsSelection = false; // !!!
}
protected override void OnDetached()
{
}
}
}
Когда вы обратите внимание на Android, вы заметите, что эффект реализуется аналогично:
[assembly: ResolutionGroupName("MyEffects")]
[assembly: ExportEffect(typeof(ListViewHighlightEffect), nameof(ListViewHighlightEffect))]
namespace Effects.Droid.Effects
{
public class ListViewHighlightEffect : PlatformEffect
{
protected override void OnAttached()
{
var listView = (Android.Widget.ListView)Control;
listView.ChoiceMode = ChoiceMode.None; // !!!
listView.SetSelector(Android.Resource.Color.Transparent); // !!!
}
protected override void OnDetached()
{
}
}
}
Вдобавок, мы можем сделать выделение прозрачным, переопределив значения цветов в styles.xml
Теперь, мы просто применим эффект для нашего списка, вот так:
MyListView.Effects.Add(Effect.Resolve("MyEffects.ListViewHighlightEffect"));
Результатом является отсутствие выделения элементов списка при выборе или прокрутке. Проверьте как это выглядит до и после на iOS:
Теги: android, ios, xamarin forms, сниппет, перевод