2017-02-24 85 views
2

當使用Xamarin.Forms ListView時,是否有任何方法可以刪除自動滾動ListView到UWP上的選定單元格,同時仍允許選擇單元格佈局內的元素?此外,有沒有什麼辦法可以在相同的情況下刪除單元格上的「選定」動畫?Xamarin.Forms 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自動滾動,同時還允許檢測單元格內的按鈕等?

回答

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> 

讓我知道,如果這有幫助!

+0

這很好,謝謝! –