Windows 上的 ListView SelectionMode

在通用 Windows 平台上,默认情况下,Xamarin.FormsListView 使用原生 ItemClick 事件来响应交互,而不是使用原生 Tapped 事件。 这提供了辅助功能,以便 Windows 讲述人和键盘可以与 ListView 交互。 但是,它也会使 ListView 内的任何点击手势都无法操作。

此特定于通用 Windows 平台的平台特定功能控制 ListView 中的项是否可以响应点击手势,以及原生 ListView 因此触发 ItemClick 事件还是 Tapped 事件。 其使用方式为,在 XAML 中将 ListView.SelectionMode 附加属性设置为 ListViewSelectionMode 枚举的值:

<ContentPage ...
             xmlns:windows="clr-namespace:Xamarin.Forms.PlatformConfiguration.WindowsSpecific;assembly=Xamarin.Forms.Core">
    <StackLayout>
        <ListView ... windows:ListView.SelectionMode="Inaccessible">
            ...
        </ListView>
    </StackLayout>
</ContentPage>

或者,可以使用 Fluent API 从 C# 使用它:

using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.WindowsSpecific;
...

listView.On<Windows>().SetSelectionMode(ListViewSelectionMode.Inaccessible);

ListView.On<Windows> 方法指定此特定于平台的功能仅在通用 Windows 平台上运行。 Xamarin.Forms.PlatformConfiguration.WindowsSpecific 命名空间中的 ListView.SetSelectionMode 方法用于控制 ListView 中的项是否可以响应点击手势,ListViewSelectionMode 枚举提供两个可能的值:

  • Accessible – 指示 ListView 将触发本机 ItemClick 事件来处理交互,从而提供辅助功能。 因此,Windows 讲述人和键盘可以与 ListView 交互。 但是,ListView 中的项无法响应点击手势。 对于通用 Windows 平台上的 ListView 实例,这是默认行为。
  • Inaccessible – 指示 ListView 将触发本机 Tapped 事件来处理交互。 因此,ListView 中的项能够响应点击手势。 但是,没有辅助功能,因此 Windows 讲述人和键盘无法与 ListView 交互。

注意

AccessibleInaccessible 选择模式是互相排斥的,你需要在可访问的 ListView 或可以响应点击手势的 ListView 之间进行选择。

此外,GetSelectionMode 方法还可用于返回当前的 ListViewSelectionMode

结果是指定的 ListViewSelectionMode 应用于 ListView,这会控制 ListView 中的项是否可以响应点击手势,从而控制本机 ListView 是触发 ItemClick 事件还是 Tapped 事件。