我使用xamarin.forms创建了listview,我正在寻找一种在点击列表视图时不突出显示视单元的方法。
请查看下图。
提前致谢:)
答案 0 :(得分:8)
SelectedItem
事件处理程序上,您可以执行以下操作:
listview.SelectedItem = null;
它会给你点击突出显示,但状态只是暂时的。
在你的情况下,我猜你是这样的,因为你正在使用2 Image
而不是Button
s作为右边的箭头,{{1 }}。您知道TapGestureRecognizer
有Button
属性吗?点击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;
}
}
}
这似乎是正确且最佳的方法...!