Как отключить выделение выделения в списке xamarin.forms на Android

Я создал список с помощью xamarin.forms, я ищу способ не выделять ячейку просмотра при нажатии на список.

пожалуйста, проверьте изображение ниже. введите здесь описание изображения

Заранее спасибо :)


person Femil Shajin    schedule 12.09.2014    source источник


Ответы (7)


в вашем обработчике событий ListView SelectedItem вы можете сделать:

listview.SelectedItem = null;

это даст вам выделение при нажатии, но состояние будет только временным.

В вашем случае, я думаю, вам это понравится, потому что вы используете 2 Image вместо Button для стрелок справа с TapGestureRecognizer. Знаете ли вы, что Button имеет свойство Image? При нажатии на Button в Cell выбранное состояние Cell не должно меняться.

person Stephane Delcroix    schedule 13.09.2014
comment
Когда я нажимаю на изображение, оно не меняет состояние списка. Он меняется только тогда, когда я по ошибке нажимаю на список, отличный от изображения, и это выглядит странно. Я попробовал ваше решение, оно не сработало.. изменил цвет фона ячейки просмотра, это помогло.. :) Спасибо за вашу помощь..:) Я не знал, что у кнопки есть свойство изображения, спасибо и за это. . - person Femil Shajin; 13.09.2014
comment
ItemSelected не может принимать значение NULL - person Alexandre; 02.10.2014
comment
вы имеете в виду, что .SelectedItem ItemSelected - это событие. SelectedItem — это свойство. - person MemeDeveloper; 16.03.2015
comment
listview.SelectedItem = ноль; - person Ajay Kumar; 26.09.2015

Просто поместите это в свою пользовательскую тему:

<item name="android:colorActivatedHighlight">@android:color/transparent</item>
person Marian    schedule 21.05.2015
comment
Спасибо. Оно работает. Файл по умолчанию, куда добавить эту строку в проекте droid, находится в Resouces/values/styles.xml. - person eka808; 19.03.2017
comment
Это сработало нормально... Мне также хотелось бы иметь реализацию для проекта Android... - person Gade Ifeoluwa; 05.04.2021

Я хочу поделиться еще одним решением, которое мне очень нравится, потому что оно простое, его нужно реализовать один раз, и его действительно легко использовать в XAML.

Сначала мы должны реализовать собственное поведение. Это довольно просто:

public class DeselectItemBehavior : Behavior<ListView>
{
    protected override void OnAttachedTo(ListView bindable)
    {
        base.OnAttachedTo(bindable);

        bindable.ItemSelected += ListView_ItemSelected;
    }

    protected override void OnDetachingFrom(ListView bindable)
    {
        base.OnDetachingFrom(bindable);

        bindable.ItemSelected -= ListView_ItemSelected;
    }

    private void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        ((ListView)sender).SelectedItem = null;
    }
}

Таким образом, мы просто регистрируемся на событие, когда поведение установлено, и отменяем его регистрацию, когда оно не установлено.

Само мероприятие использует подход Стефана Делькруа.

Теперь все, что вам нужно сделать в ListView, это добавить такое поведение:

<ListView ...>
    <ListView.Behaviors>
        <behaviors:DeselectItemBehavior />
    </ListView.Behaviors>
person Kithoras Carzyl    schedule 16.05.2019

Для отключения выделения ячеек списка в Android и iOS очень полезна эта ссылка.

https://gist.github.com/jessejiang0214/63b29b3166330c6fc083

ProjectName.Android/Resources/values/styles.xml

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <style name="CustomTheme" parent="android:Theme.Holo.Light">
        <item name="android:colorActivatedHighlight">@android:color/transparent</item>
    </style>
</resources>

CustomAllViewCellRendereriOS.cs

using System;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer (typeof(ViewCell), typeof(MyAPP.iOS.CustomAllViewCellRendereriOS))]
namespace MyAPP.iOS
{
    public class CustomAllViewCellRendereriOS : ViewCellRenderer
    {
        public override UIKit.UITableViewCell GetCell (Cell item, UIKit.UITableViewCell reusableCell, UIKit.UITableView tv)
        {
            var cell =  base.GetCell (item, reusableCell, tv);
            if (cell != null)
                cell.SelectionStyle = UIKit.UITableViewCellSelectionStyle.None;
            return cell;
        }
    }
}

Это кажется правильным и лучшим способом...!

person Mac    schedule 11.02.2019

Я использую: ListView SelectionMode = "None" в Xamarin.Forms.

person michal    schedule 21.08.2020
comment
ЭТО должно быть принятым ответом (это самое простое и последнее решение) - person Zotyi; 26.02.2021
comment
Это деактивирует функциональность SelectionChanged. - person Gade Ifeoluwa; 05.04.2021

Вы не можете, вы должны реализовать собственный рендеринг. Если вы просто установите для выбранного элемента значение null, он удалит выбранный цвет. Но вы сначала выбрали элемент, а затем снова отменили его (множественные события), но вы его не видели :-). Если вы включили эффект наклона на Windows Phone, наклон все равно произойдет из-за всего события!

Но я хотел бы, чтобы команда Xamarin Forms реализовала свойства CanSelect в списке.

person Frederik Winstrup Johansen    schedule 24.08.2015

Я хочу предложить вам другое решение. Можете добавить:

IsEnabled="False"

в виджете списка. В моем случае это решение работает хорошо.

person TeoVr81    schedule 27.09.2017
comment
Спасибо. Отлично работает для меня! - person Max; 06.10.2017
comment
@TeoVr81 TeoVr81 отключит все события в списке, а не только выбор, например. ты не сможешь прокрутить - person Scarnet; 17.01.2018