Xamarin.Forms ListView禁用UWP上的选择

时间:2017-02-24 12:23:17

标签: listview xamarin uwp xamarin.forms

当使用Xamarin.Forms ListView时,是否有任何方法可以删除ListView自动滚动到UWP上的选定单元格,同时仍允许在单元格布局中选择元素?另外,有没有办法删除"选择"动画在同一情况下的单元格?

我已经设法通过完全禁用ListViewRenderer中的命中检测来实现视觉效果,如下所示:

var style = new Style(typeof(ListViewItem));
var setter = new Setter(ListViewItem.IsHitTestVisibleProperty, false);
style.Setters.Add(setter);
((ListView)Control).ItemContainerStyle = style;

然而,显然这也会禁用单元格内元素的命中检测。

在UWP中是否有任何方法可以实现禁用动画/ ListView自动滚动,同时仍允许检测单元格内的按钮等?

1 个答案:

答案 0 :(得分:4)

在UWP上, <div class="DIV1 col-xs-12 col-sm-8 col-md-8 col-lg-8" /> <div class="DIV2 col-xs-12 col-sm-4 col-md-4 col-lg-4" /> <div class="DIV3 col-xs-12 col-sm-8 col-md-8 col-lg-8" />具有ListView属性,可以设置为SelectionMode。这可能是禁用自动滚动的最简单方法。不幸的是,这个属性没有反映在None的Xamarin.Forms抽象中。

要设置此项(仅适用于UWP),您并不需要自定义渲染器,Xamarin.Forms Effect应该可以完成此任务。所以你可以在你的Xamarin.Forms UWP项目中创建一个ListView类,让它看起来像这样:

NoSelectionEffect

接下来,您需要在Xamarin.Forms PCL中为渲染器创建一个类:

using ListViewScrollingTestForms.UWP;
using Xamarin.Forms;
using Xamarin.Forms.Platform.UWP;

[assembly: ResolutionGroupName("MyCompany")]
[assembly: ExportEffect(typeof(NoSelectionEffect), "NoSelectionEffect")]
namespace ListViewScrollingTestForms.UWP
{
    public class NoSelectionEffect : PlatformEffect
    {
        protected override void OnAttached()
        {
            // Set selection mode to 'None'     
            (Control as Windows.UI.Xaml.Controls.ListView).SelectionMode = Windows.UI.Xaml.Controls.ListViewSelectionMode.None;            
        }

        protected override void OnDetached()
        {
            // Set selection mode back to the default one of Xamarin.Forms (Single)
            (Control as Windows.UI.Xaml.Controls.ListView).SelectionMode = Windows.UI.Xaml.Controls.ListViewSelectionMode.Single;
        }
    }
}

现在,您可以将效果附加到public class NoSelectionEffect : RoutingEffect { public NoSelectionEffect() : base("MyCompany.NoSelectionEffect") {} } ,这应该可以胜任。

ListView

如果有帮助,请告诉我!