首页 文章

Xamarin.Forms ListView禁用UWP上的选择

提问于
浏览
2

当使用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 回答

  • 4

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

    要设置此项(仅在UWP上),您实际上不需要自定义渲染器,Xamarin.Forms Effect应该可以完成这项工作 . 所以你可以在你的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") {}
    }
    

    现在您可以将效果附加到 ListView ,这应该可以完成工作 .

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

    让我知道,如果这有帮助!

相关问题