添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class ListView : ListViewBase
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class ListView : ListViewBase
Public Class ListView
Inherits ListViewBase
<ListView .../>
<ListView ...>
  oneOrMoreItems
</ListView>
						   Object
						   IInspectable
						   DependencyObject
						   UIElement
						   FrameworkElement
						   Control
						   ItemsControl
						   Selector
						   ListViewBase
					 ListView 

WinUI 2 库应用包括大多数 WinUI 2 控件、特性和功能的交互式示例。 通过 Microsoft Store 获取应用,或在 GitHub 上获取源代码。

在此示例中,ListView 的 ItemTemplate 是内联定义的。 由于设置了 ItemsSource因此 ItemTemplate 将应用于每个项。

<ListView x:Name="itemListView"
          Margin="120,0,0,60"
          ItemsSource="{Binding Source={StaticResource itemsViewSource}}"
          SelectionChanged="ItemListView_SelectionChanged">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid Height="110" Margin="6">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="110" Height="110">
                    <Image Source="{Binding Image}" Stretch="UniformToFill"/>
                </Border>
                <StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="10,0,0,0">
                    <TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap"/>
                    <TextBlock Text="{Binding Subtitle}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap"/>
                    <TextBlock Text="{Binding Description}" Style="{StaticResource BodyTextStyle}" MaxHeight="60"/>
                </StackPanel>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>          
</ListView>
<ListView>
    <ListView.ItemTemplate>
        <DataTemplate>
                <Border Background="LightGray" Height="200" Width="200">
                    <TextBlock Text="{Binding}" 
                               FontSize="48" Foreground="Green"/>
                </Border>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
    <ListView.Items>
        <x:String>One</x:String>
        <ListViewItem>Two</ListViewItem>
    </ListView.Items>
</ListView>

在以下示例中,整个应用中每个 ListView 中项目的角舍入为 5px。

<Application.Resources>
    <CornerRadius x:Key="ListViewItemCornerRadius">5</CornerRadius>
</Application.Resources>

有关详细信息、设计指南和代码示例,请参阅 列表视图和网格视图

使用 ListView 可显示垂直或水平堆叠的项的集合。 若要在行和列中显示集合,请使用 GridView

ListView 是 ItemsControl,因此它可以包含任何类型的项的集合。 若要填充视图,将项添加到 Items 集合,或者将 ItemsSource 属性设置为数据源。

在默认情况下,数据项以绑定到的数据对象的字符串表现形式显示在 ListView 中。 若要指定 ListView 中项的确切显示方式,请创建 DataTemplate 来定义用于显示单个项的控件的布局。 该布局中的控件可绑定到数据对象的属性,或者具有定义的嵌入内容。 将 DataTemplate 分配给 ListView 的 ItemTemplate 属性。 有关可在应用中使用的常见模板,请参阅 ListView 的项模板

如果通过设置 ItemsSource 属性填充 ListView, 则 ItemTemplate 将应用于每个项。 如果直接填充 Items 集合,则仅当项不是 ListViewItem 时,才会应用 ItemTemplate。 有关详细信息,请参阅示例。

如果使用 ListView 显示大型数据集,请参阅 优化 ListView 和 GridView 以获取保持流畅且响应迅速的用户体验的提示。

Windows 10版本 1709 (SDK 16299) - 行为更改 默认情况下,主动笔现在可在 UWP 应用中滚动/平移列表,而不是进行选择(与触摸、触摸板和被动笔一样)。 如果你的应用取决于以前的行为,你可以替代笔滚动,并还原为以前的行为。 请参阅

默认情况下,用户可以在 ListView 中选择单个项。 可以将 SelectionMode 属性设置为 ListViewSelectionMode 枚举值,以允许多选或禁用选择。 还可以更改 ListView 交互模式,使项响应用户单击时像按钮一样,而不是被选中。

此表显示了用户与 ListView 交互的方式,以及如何响应交互。

若要启用此交互: 使用这些设置: 处理此事件: 使用此属性以获取选定的项目: PointerWheelChanged 事件不会从 ListView 弹出。 这意味着,如果指针位于 ListView 上,则其中包含 ListView 的控件不会收到鼠标滚轮更改消息。 例如,如果将 ListView 置于 ScrollViewer 中,则当指针位于 ListView 上时,无法使用鼠标滚轮滚动 ScrollViewer。

ListView 支持数据虚拟化,以提高大型数据集的性能。 当数据源实现适当的接口时,支持随机访问虚拟化,这些接口因编程语言而异:

  • Visual C++ 组件扩展 (C++/CX) 应用应实现 IObservableVector
  • C# 或 Visual Basic 应用应实现 INotifyCollectionChangedSystem.Collections.IList (而不是 IList<T>) 。 虚拟化需要这两个接口。 当数据源实现 ISupportIncrementalLoading 接口时,支持增量加载虚拟化。 支持增量加载时,可以使用这些成员来控制数据加载: DataFetchSizeIncrementalLoadingThresholdIncrementalLoadingTriggerLoadMoreItemsAsync
  • Windows 8 Windows 8,替换所选 ListViewItem 中的数据项时,不会清除 SelectedIndex 值。 在Windows 8.1或更高版本中,将清除 SelectedIndex 值。

    ListView 实现 ISemanticZoomInformation 接口,因此它可以用作 SemanticZoom 控件中的视图。 在 SemanticZoom 控件中使用时,始终在 ListView 控件模板中的 ScrollViewer 上将 ScrollViewer.IsVerticalScrollChainingEnabled 附加属性设置为 false,如下所示:。 <ListView ScrollViewer.IsVerticalScrollChainingEnabled="False"> 仅当 ListView 托管在 SemanticZoom 控件中时,这些成员才有效:IsActiveViewIsZoomedInViewSemanticZoomOwnerCompleteViewChange、CompleteViewChangeFromCompleteViewChangeToInitializeViewChangeMakeVisibleStartViewChangeFromStartViewChangeTo

    如果需要处理可滚动视图中 UIElement 的指针事件 (如 ScrollViewer) ,则必须通过调用 UIElement.CancelDirectmanipulation () 显式禁用对视图中元素的操作事件的支持。 若要在该视图中重新启用操作事件,请调用 UIElement.TryStartDirectManipulation()

    选择行为和 CollectionViewSource

    派生自 选择器 的列表控件具有默认选择行为,具体取决于项源 (用于 ItemsSource) 的类型。 如果项源是 CollectionViewSource 实例,则选择控件中的行为是选择将默认为当前项。 首次显示列表时,所选内容默认为第一项作为当前项。 如果不希望在这种情况下选择第一项,请在 ListView 中将 IsSynchronizedWithCurrentItem 设置为 false

    WinUI 2.6 中的视觉对象更新

    WinUI 2.6 中,添加了新的 API 和样式来更新 ListView 的视觉对象和设计。 这些更新后的视觉对象包括圆角、选择指示器等。

    如果要使用这些新样式,请先确保在应用中使用 WinUI 2.6。 若要使用 WinUI 2 进行设置,请参阅 Windows UI 2.x 库入门

    始终可以通过在应用中指定 Xaml 资源来修改 ListView 的外观。 WinUI 2.6 中提供的新资源是 ListViewItemCornerRadius,它控制 ListViewItem 角上的舍入级别。 默认情况下,此主题资源设置为 4px。

    获取与此对象关联的 CoreDispatcherCoreDispatcher 表示可以访问 UI 线程上的 DependencyObject 的工具,即使代码是由非 UI 线程启动的。

    (继承自 DependencyObject)

    获取或设置文本和其他 UI 元素在控制其布局的任何父元素中的流动方向。 此属性可以设置为 LeftToRightRightToLeft。 在任何元素上将 FlowDirection 设置为 RightToLeft 会将对齐方式设置为右对齐,将读取顺序设置为从右到左,并将控件的布局设置为从右到左流动。

    (继承自 FrameworkElement)

    获取或设置 UIElement (使用的 UI 主题及其子元素) 资源确定。 使用 RequestedTheme 指定的 UI 主题可以替代应用级 RequestedTheme

    (继承自 FrameworkElement)

    获取本地定义的资源字典。 在 XAML 中,可以通过 XAML 隐式集合语法将资源项建立为 property 元素的 frameworkElement.Resources 子对象元素。

    (继承自 FrameworkElement)

    为指定的路由事件添加路由事件处理程序,并将该处理程序添加到当前元素的处理程序集合中。 将 handledEventsToo 指定为 true ,以调用提供的处理程序,即使在其他位置处理事件也是如此。

    (继承自 UIElement)

    汇报 UIElementDesiredSize。 通常,为其布局子级实现自定义布局的对象从其自己的 MeasureOverride 实现中调用此方法,以形成递归布局更新。

    (继承自 UIElement)

    每当应用程序代码或内部进程 ((例如重新生成布局传递) 调用 ApplyTemplate)时调用。 用最简单的术语来说,这意味着在 UI 元素在应用中显示之前调用 方法。 重写此方法以影响类的默认后模板逻辑。

    (继承自 FrameworkElement)

    在应用中处理 键盘快捷方式 (或快捷键) 之前调用。 每当应用程序代码或内部进程调用 ProcessKeyboardAccelerators 时调用。 重写此方法以影响默认加速器处理。

    (继承自 UIElement)

    在释放之前启动 Press 操作的指针设备时发生,而此元素中。 请注意, 不保证按下 操作的结束会触发 PointerReleased 事件;其他事件可能会改为触发。 有关详细信息,请参阅备注。

    (继承自 UIElement)