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; // !!!
        }

        protected override void OnDetached()
        {

        }
    }
}

Вдобавок, мы можем сделать выделение прозрачным, переопределив значения цветов в styles.xml

Теперь, мы просто применим эффект для нашего списка, вот так:

MyListView.Effects.Add(Effect.Resolve("MyEffects.ListViewHighlightEffect"));

Результатом является отсутствие выделения элементов списка при выборе или прокрутке. Проверьте как это выглядит до и после на iOS:

Оригинал

Теги: android, ios, xamarin forms, сниппет, перевод

Редактировать