如何在android上的listview xamarin.forms中禁用选择高亮显示

时间:2014-09-12 13:08:14

标签: android listview xamarin.forms

我使用xamarin.forms创建了listview,我正在寻找一种在点击列表视图时不突出显示视单元的方法。

请查看下图。 enter image description here

提前致谢:)

7 个答案:

答案 0 :(得分:8)

在ListView SelectedItem事件处理程序上

,您可以执行以下操作:

listview.SelectedItem = null;

它会给你点击突出显示,但状态只是暂时的。

在你的情况下,我猜你是这样的,因为你正在使用2 Image而不是Button s作为右边的箭头,{{1 }}。您知道TapGestureRecognizerButton属性吗?点击Image中的Button时,Cell所选状态不应发生变化。

答案 1 :(得分:2)

将它放在您的自定义主题中:

<item name="android:colorActivatedHighlight">@android:color/transparent</item>

答案 2 :(得分:1)

你不能,你必须实现自定义渲染。如果您只是将所选项目设置为null,它将删除所选颜色。但是你首先会选择该项目,然后再次取消选择(多重事件),但你没有看到它:-)。如果您在Windows Phone上启用了倾斜效果,则由于所有事件仍然会发生倾斜!

但我希望看到Xamarin Forms团队在listview上实现CanSelect属性。

答案 3 :(得分:1)

我想建议你另一个解决方案。 您可以添加:

IsEnabled="False"
列表视图小部件中的

。 就我而言,这个解决方案效果很好。

答案 4 :(得分:1)

我想分享我真正喜欢的另一个解决方案,因为它很简单,您只需实施一次,并且在XAML中非常容易使用。

首先,我们必须实现自己的行为。这很简单:

public class DeselectItemBehaviour : 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;
    }
}

因此,我们只是在设置行为后向事件注册,而在未设置行为时就取消注册。

该事件本身使用Stephane Delcroix方法。

现在您在ListView中要做的所有事情就是添加如下行为:

<ListView ...>
    <ListView.Behaviors>
        <behaviours:DeselectItemBehaviour />
    </ListView.Behaviors>

答案 5 :(得分:1)

我在Xamarin.Forms中使用ListView SelectionMode = "None"

答案 6 :(得分:0)

对于在Android和iOS中都禁用Listview单元格选择突出显示,此链接非常有用

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

这似乎是正确且最佳的方法...!