簡體   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