繁体   English   中英

Xamarin.Forms ListView在UWP上禁用选择

[英]Xamarin.Forms ListView disable selection on UWP

当使用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自动滚动,同时仍允许检测单元格中的按钮等吗?

在UWP上, ListView具有一个SelectionMode属性,可以将其设置为None 这可能是禁用自动滚动的最简单方法。 不幸的是,该属性没有反映在ListView的Xamarin.Forms抽象中。

要设置此设置(仅在UWP上),您实际上不需要自定义渲染器, Xamarin.Forms效果就可以完成此工作。 因此,您只需在Xamarin.Forms UWP项目中创建一个NoSelectionEffect类,并使其如下所示:

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

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

public class NoSelectionEffect : RoutingEffect
{
    public NoSelectionEffect() : base("MyCompany.NoSelectionEffect") {}
}

现在,您可以将Effect附加到ListView ,这应该可以完成工作。

<ListView>
    <ListView.Effects>
        <local:NoSelectionEffect />
    </ListView.Effects>
</ListView>

让我知道,如果有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM