Version: 6000.3
语言: 中文
朗菲尔德
MaskField (遮罩字段)

列表视图

ListView 是一个垂直滚动的区域,它链接到并显示项列表。

注意:水平和垂直滚动器元素是标准的 UI 工具包滚动器。

创建列表视图

你可以使用 UI Builder、UXML 和 C# 创建 ListView。以下 C# 示例创建 ListView:

var listView = new ListView();

ListView 与 ScrollView

您可以使用ScrollView一种 UI 控件,用于在可视区域中显示大量控件,您可以使用滚动条查看这些控件。更多信息
请参阅术语表
控件创建与使用 ListView 相同的功能。但是,执行以下作时,ListView 比 ScrollView 更有效:

  • 填充列表项
  • 管理项目高度
  • 绑定和取消绑定到对象
  • 实例化视觉元素实例化或派生自 C# 的可视化树的节点VisualElement类。您可以设置外观样式、定义行为并将其作为 UI 的一部分显示在屏幕上。更多信息
    请参阅术语表
    填写页面所需
  • 回收视觉元素以优化内存处理

刷新集合视图

若要刷新集合视图,可以调用RefreshItems/RefreshItemRebuild.

通常,调用RefreshItemsRefreshItem方法——这些方法仅刷新集合视图,并且成本较低。如果您调用Rebuild,则集合视图将完全重建,这可能会很昂贵。

但是,您必须调用Rebuild在以下情况下:

  • 您可以更改数据源的类型,例如从List<float>设置为List<Vector3>.
  • 您对makeItemdestroyItem.

设置项目高度

若要更改项高度用于驱动内容的方式,请使用 VirtualizationMethod

  • VirtualizationMethod.FixedHeight将所有项目设置为相同的高度。
  • VirtualizationMethod.DynamicHeight允许项目具有不同的高度。

控制滚动速度

ListView 具有内置的子 ScrollView 元素,允许用户滚动浏览列表。您可以通过以下方式控制滚动速度覆盖mouseWheelScrollSize,horizontalPageSizeverticalPageSize使用 C 的 ScrollView 属性#.

使列表可重新排序

默认情况下,ListView 控件不可重新排序。要使其可重新排序,请将reorderable属性设置为true在UI Builder、UXML或C#中。

listView.reorderable = true;

实现 ListView 的拖放作

拖放是 UI 设计中的常见功能。若要实现拖放作,请重写以下方法:

在拖放作中,您可以通过拖动来启用项目的重新排序。要启用,请将reorderable属性设置为true在UI Builder、UXML和C#中。

有关示例,请参阅在窗口之间创建拖放列表和树视图。

ListView 常见问题解答

下面是有关 ListView 控件的一些常见问题。

是否可以获取视图中可见的行列表?

没有专用的 API。您可以使用 UQuery 检索感兴趣的元素。

视图控制器的任何被覆盖函数是否必须调用base.Method?

仅当要扩展其默认行为时,才调用此方法。

我已向我的行添加了一个 Toggle。为什么当用户选择选择时,选择不跳转到该行?

默认情况下,仅当行的内容未使用鼠标向下事件时,才会选择该行。在这种情况下,您的 Toggle 会停止事件传播。要解决此问题,请注册一个PointerDownEvent回调为TrickleDown在切换调用SetSelection.

当用户更改视图中的选择时,如何接收回调?

建议使用selectedIndicesChanged回调以在需要时按索引检索数据。虽然您也可以使用selectionChanged,请注意,它返回一个对象列表,这在与值类型一起使用时可能会导致装箱分配。

我可以获取屏幕上可见的行的索引吗?

没有专用的 API。您可以使用bindItemunbindItem回调来跟踪这些索引userData.

我可以有一个水平 ListView 吗?

ListView 控件不支持水平布局和虚拟化。建议将 ScrollView 与flex-direction: row水平布局元素。但是,将其应用于 ListView 会破坏虚拟化。

例子

以下UXML示例创建ListView:

<UXML xmlns="UnityEngine.UIElements">
    <ListView class="the-uxml-listview" fixed-item-height="20" />
</UXML>

以下 C# 示例演示了 ListView 的一些可自定义功能:

/// <sample>
// Create some list of data, here simply numbers in interval [1, 1000]
const int itemCount = 1000;
var items = new List<string>(itemCount);
for (var i = 0; i < itemCount; i++)
    items.Add(i.ToString());

// The "makeItem" function will be called as needed
// when the ListView needs more items to render
Func<VisualElement> makeItem = () => new Label();

// As the user scrolls through the list, the ListView object
// will recycle elements created by the "makeItem"
// and invoke the "bindItem" callback to associate
// the element with the matching data item (specified as an index in the list)
Action<VisualElement, int> bindItem = (e, i) => ((Label)e).text = items[i];

var listView = container.Q<ListView>();
listView.makeItem = makeItem;
listView.bindItem = bindItem;
listView.itemsSource = items;
listView.selectionType = SelectionType.Multiple;

// Callback invoked when the user double clicks an item
listView.itemsChosen += (selectedItems) =>
{
    Debug.Log("Items chosen: " + string.Join(", ", selectedItems));
};

// Callback invoked when the user changes the selection inside the ListView
listView.selectedIndicesChanged += (selectedIndices) =>
{
    Debug.Log("Index selected: " + string.Join(", ", selectedIndices));

    // Note: selectedIndices can also be used to get the selected items from the itemsSource directly or
    // by using listView.viewController.GetItemForIndex(index).
};
/// </sample>

若要在 Unity 中实时试用此示例,请转到 Window > UI 工具包>示例。 ​ 有关更多示例,请参阅以下内容:

C# 基类和命名空间

C# 类ListView
命名空间UnityEngine.UIElements
基类BaseListView

成员 UXML 属性

此元素具有以下成员属性:

名字 类型 描述
item-template UIElements.VisualTreeAsset 一个UXML模板,用于构造列表中的每个回收和回弹元素。此模板旨在将makeItem定义。

您可以将其与
BaseListView.bindingSourceSelectionMode和绑定,以实现完全无代码的工作流程。

继承的UXML属性

此元素从其基类继承以下属性:

名字 类型 描述
allow-add boolean 此属性允许用户在单击“添加按钮”时允许或阻止添加项目。它必须返回truefalse.

如果回调未设置为
false,则允许任何 Add作。
allow-remove boolean 此属性允许用户在单击“删除”按钮时允许或阻止删除项目。它必须返回truefalse.

如果属性未设置为
false,将允许任何删除作。
binding-path string 要绑定的目标属性的路径。
binding-source-selection-mode UIElements.BindingSourceSelectionMode 此属性控制列表中的每个元素是否会自动将其数据源设置获取到集合源中的正确项。

当设置为
AutoAssign,则无需指定绑定回调,因为绑定可用于填充元素。
fixed-item-height float 列表中单个项目的高度(以像素为单位)。

使用
virtualizationMethod设置为FixedHeight,以便集合视图正常运行。如果设置在以下情况下virtualizationMethodDynamicHeight,它作为默认高度,以帮助在布置项目之前计算所需项目的数量和可滚动区域。它应设置为项目的最小预期高度。
focusable boolean 如果为 false,则阻止对元素进行聚焦。

仅当元素的 canGrabFocus 属性为 true 时,才能对元素进行聚焦。
header-title string 此属性在使用showFoldoutHeader.

如果
makeHeadercallback 时,此属性将被覆盖,并且不显示标题。
horizontal-scrolling boolean 此属性控制集合视图在内容不适合可见区域时是否显示水平滚动条。
reorder-mode UIElements.ListViewReorderMode 此属性控制列表视图的拖放模式。
默认值
Simple.当此属性设置为Animated,Unity 会在每个项目前面添加拖动手柄,并且拖放作会在重新排序时使用动画推送项目。仅支持多项重新排序Simple拖动模式。
reorderable boolean 获取或设置一个值,该值指示用户是否可以拖动列表项以对其进行重新排序。
默认值
false它允许用户在实现时将项目拖入其他视图或从其他视图拖动canStartDrag,setupDragAndDrop,dragAndDropUpdatehandleDrop.将此值设置为true以允许用户对列表中的项目重新排序。
selection-type UIElements.SelectionType 控制选择类型。
默认值
SelectionType.Single.将集合视图设置为禁用选择时,将清除所有当前选择。
show-add-remove-footer boolean 此属性控制是否将页脚添加到列表视图。
默认值
false.当此属性设置为true,Unity 会在滚动视图下添加页脚。此页脚包含两个按钮:“+”按钮。单击后,它会在列表视图的末尾添加单个项目。一个“-”按钮。单击时,它将删除所有选定的项目,如果未选择任何项目,则删除最后一个项目。如果makeFootercallback 时,它将覆盖此属性。
show-alternating-row-backgrounds UIElements.AlternatingRowBackground 此属性控制集合视图行的背景颜色是否交替。从AlternatingRowBackground枚举。
show-border boolean 启用此属性可在集合视图周围显示边框。

如果设置为 true,则集合视图在内部使用的 ScrollView 周围显示一个边框。
show-bound-collection-size boolean 此属性控制列表视图是否显示集合大小(项数)。
默认值
true.当此属性设置为true,则 ListView 包括一个 TextField 来控制数组大小。
show-foldout-header boolean 此属性控制列表视图是否以可展开或折叠的折叠形式显示标题。
默认值
false.当此属性设置为true,Unity 会在列表视图的层次结构中添加折叠,并将滚动视图移动到新创建的折叠内。您可以使用以下命令更改此折叠的文本headerTitle属性。如果showBoundCollectionSize设置为true,则 ListView 包括一个 TextField 来控制数组大小。如果makeHeader回调,则不显示折叠。
tabindex int 用于对焦点环中的可聚焦元素进行排序的整数。必须大于或等于零。

tabIndex值小于0(例如,−1) 从焦点环和选项卡导航中删除元素。
virtualization-method UIElements.CollectionVirtualizationMethod 滚动条可见时用于此集合的虚拟化方法。从CollectionVirtualizationMethod枚举。
默认值
FixedHeight.使用固定高度时,请指定fixedItemHeight财产。固定高度的性能更高,但内容的灵活性较差。使用时DynamicHeight,集合将等待计算实际高度。动态高度更灵活,但性能较差。

此元素还继承了以下属性VisualElement:

名字 类型 描述
content-container string 添加子元素的逻辑容器。如果将子元素添加到此元素,则将子元素添加到该元素的内容容器中。

当迭代
VisualElement.Children元素的元素,则使用元素的内容容器层次结构而不是元素本身。这可能会导致意外结果,例如,如果元素不直接位于内容容器的层次结构中,则导航事件会忽略元素。 指IFocusRing了解更多信息。

如果内容容器与元素本身相同,则子元素将直接添加到元素中。对于大多数元素来说都是如此,但可以被更复杂的类型覆盖。

ScrollView例如,具有与自身不同的内容容器。在这种情况下,添加到滚动视图的子元素将改为添加到其内容容器元素中。虽然物理父级 (VisualElement.Hierarchy.parent) 是滚动视图的内容容器元素,它们的逻辑父元素 (VisualElement.parent) 仍然引用滚动视图本身。由于滚动视图的一些可聚焦子项不是其逻辑层次结构的一部分,例如Scroller元素,在使用顺序导航时,默认情况下不考虑这些可聚焦的子项。如果默认导航规则与您的需求不符,请参阅如何更改接下来关注的元素,了解解决方法解决方案的示例。
data-source Object 将数据源分配给此 VisualElement,该 VisualElement 将替代任何继承的数据源。此数据源由所有子级继承。
data-source-path string 从数据源到值的路径。
data-source-type System.Type 可分配给此 VisualElement 的可能数据源类型。
当设计时无法指定有效数据源时,UI 生成器仅将
此信息用作提示,以对数据源路径字段进行一些补全。
enabled boolean 如果VisualElement在本地启用。
如果 VisualElement 的父级之一隐式禁用,则
不会更改此标志。要验证这一点,请使用
enabledInHierarchy.
language-direction UIElements.LanguageDirection 指示元素文本的方向性。该值将传播到元素的子项。

设置
languageDirectionRTL只能获得文本反转等基本的 RTL 支持。要获得更全面的 RTL 支持,例如换行、自动换行或文本整形,您必须启用高级文本生成器
name string 此 VisualElement 的名称。

使用此属性可以编写面向特定元素的 USS 选择器。标准做法是为元素指定一个唯一的名称。
picking-mode UIElements.PickingMode 确定此元素是可以作为指针事件的目标还是由IPanel.Pick查询。

如果出现以下情况,则无法拾取元素:

- 它们不可见- 它们的
style.display设置为DisplayStyle.None

拾取模式为PickingMode.Ignore永远不要接收悬停伪状态。
style string VisualElement.
返回
的样式数据是根据 USS 文件或在 C# 中写入此对象的内联样式计算得出的,不表示完全解析的样式,例如 VisualElement 的最终高度和宽度。要访问这些完全解析的样式,请使用
resolvedStyle.



有关如何使用此属性和所有受支持的 USS 属性的信息,请参阅在 C# 脚本中应用样式USS 属性参考手册页。
tooltip string 用户将鼠标悬停在元素上一小段时间后,要在信息框内显示的文本。这仅在编辑器UI中受支持。
usage-hints UIElements.UsageHints 提示值的组合,用于指定VisualElement.只有当VisualElement还不是Panel.曾经是Panel,则此属性实际上变为只读,尝试更改它将引发异常。适当的规范UsageHints驱动系统根据预期的使用模式就如何处理或加速某些作做出更好的决策。请注意,这些提示不会影响行为或视觉结果,而只会影响面板和其中元素的整体性能。建议始终考虑指定适当的UsageHints,但请记住,某些UsageHints在某些情况下(例如,由于目标平台上的硬件限制),可能会在内部忽略。
view-data-key string 用于视图数据持久性,例如树展开状态、滚动位置或缩放级别。

此键用于从视图数据存储中保存和加载视图数据。如果未设置此键,则会禁用关联的持久性
VisualElement.有关更多信息,请参阅 Unity 手册中的查看数据持久性

USS 级

下表列出了所有 C# 公共属性名称及其相关的 USS 选择器。

C# 属性 USS 选择器 描述
ussClassName .unity-list-view ListView 元素的 USS 类名称。

Unity 将此 USS 类添加到 ListView 元素的每个实例中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个 ListView。
itemUssClassName .unity-list-view__item ListView 元素中项元素的 USS 类名称。

Unity 将此 USS 类添加到 ListView 包含的每个项目元素中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个项目元素。
emptyLabelUssClassName .unity-list-view__empty-label ListView 为空时显示的标签的 USS 类名称。

如果 ListView 为空,Unity 会将此 USS 类添加到显示的标签中。应用于此类的任何样式都会影响可视化树中样式表旁边或下方的每个空标签。
reorderableUssClassName .unity-list-view__reorderable 可重新排序的动画 ListView 元素的 USS 类名称。

Unity 会在以下情况下将此 USS 类添加到 ListView 元素的每个实例中
reorderMode设置为Animated.应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个 ListView。
reorderableItemUssClassName .unity-list-view__reorderable-item 可重新排序的动画 ListView 中项元素的 USS 类名称。

Unity 将此 USS 类添加到 ListView 中的每个元素中,当
reorderMode设置为Animated.应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个元素。
reorderableItemContainerUssClassName .unity-list-view__reorderable-item__container 可重新排序的动画 ListView 中项容器的 USS 类名称。

Unity 将此 USS 类添加到 ListView 中的每个项目容器中,当
reorderMode设置为Animated.应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个项目容器。
reorderableItemHandleUssClassName .unity-list-view__reorderable-handle 可重新排序的动画 ListView 中拖动句柄的 USS 类名称。

Unity 将此 USS 类添加到 ListView 中的拖动手柄,当
reorderMode设置为Animated.应用于此类的任何样式都会影响可视化树中位于样式表旁边或下方的每个拖动手柄。
reorderableItemHandleBarUssClassName .unity-list-view__reorderable-handle-bar 可重新排序的动画 ListView 中拖动手柄栏的 USS 类名称。

Unity 将此 USS 类添加到 ListView 中的每个拖动手柄栏,当
reorderMode设置为Animated.应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个拖动手柄栏。
footerUssClassName .unity-list-view__footer ListView 页脚的 USS 类名称。

Unity 将此 USS 类添加到 ListView 中的页脚元素中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个 ListView。
foldoutHeaderUssClassName .unity-list-view__foldout-header ListView 折叠标头的 USS 类名称。

Unity 将此 USS 类添加到 ListView 中的 foldout 元素中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个折叠。
arraySizeFieldUssClassName .unity-list-view__size-field 启用

显示绑定集合大小时,Unity 将此 USS 类添加到 ListView 中的 size 字段元素中,当
showBoundCollectionSize设置为true.应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个大小字段。
arraySizeFieldWithHeaderUssClassName .unity-list-view__size-field--with-header 启用折叠标头时 ListView 的 size 字段的 USS 类名称。

showBoundCollectionSize设置为true.应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个大小字段。
arraySizeFieldWithFooterUssClassName .unity-list-view__size-field--with-footer 启用页脚时 ListView 的 size 字段的 USS 类名称。

Unity 将此 USS 类添加到 ListView 中的 size 字段元素中,当
showBoundCollectionSize设置为true.应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个大小字段。
listViewWithHeaderUssClassName .unity-list-view--with-header 启用折叠标头时 ListView 的 USS 类名称。

Unity 将此 USS 类添加到 ListView 时
showFoldoutHeader设置为true.应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个列表。
listViewWithFooterUssClassName .unity-list-view--with-footer 启用添加/删除页脚时 ListView 的 USS 类名称。

Unity 将此 USS 类添加到 ListView 时
showAddRemoveFooter设置为true.应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个列表。
scrollViewWithFooterUssClassName .unity-list-view__scroll-view--with-footer 启用添加/删除页脚时滚动视图的 USS 类名称。

Unity 添加了这个 USS 级滚动视图
BaseListView什么时候showAddRemoveFooter设置为true.应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个列表。
ussClassName .unity-collection-view BaseVerticalCollectionView 元素的 USS 类名称。

Unity 将此 USS 类添加到 BaseVerticalCollectionView 元素的每个实例中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个 BaseVerticalCollectionView。
borderUssClassName .unity-collection-view--with-border 带边框的 BaseVerticalCollectionView 元素的 USS 类名称。

如果实例的
BaseVerticalCollectionView.showBorder属性设置为 true。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个此类 BaseVerticalCollectionView。
itemUssClassName .unity-collection-view__item BaseVerticalCollectionView 元素中项目元素的 USS 类名称。

Unity 将此 USS 类添加到 BaseVerticalCollectionView 包含的每个项目元素中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个项目元素。
dragHoverBarUssClassName .unity-collection-view__drag-hover-bar 拖动悬停杆的 USS 级名称。

Unity 将此 USS 类添加到用户拖动列表中的项目时显示的栏中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个 BaseVerticalCollectionView。
dragHoverMarkerUssClassName .unity-collection-view__drag-hover-marker 用于指示深度的拖动悬停圆形标记的 USS 级名称。

Unity 将此 USS 类添加到用户拖动列表中的项目时显示的栏中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个 BaseVerticalCollectionView。
itemDragHoverUssClassName .unity-collection-view__item--drag-hover 在拖动悬停时应用于项目元素的 USS 类名称。

Unity 在拖动 item 元素时将此 USS 类添加到 item 元素中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个 BaseVerticalCollectionView 项。
itemSelectedVariantUssClassName .unity-collection-view__item--selected BaseVerticalCollectionView 中所选项元素的 USS 类名称。

Unity 将此 USS 类添加到 BaseVerticalCollectionView 中的每个选定元素。这
BaseVerticalCollectionView.selectionType属性决定是否可以选择零个、一个或多个元素。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个 BaseVerticalCollectionView 项。
itemAlternativeBackgroundUssClassName .unity-collection-view__item--alternative-background BaseVerticalCollectionView 中奇数行的 USS 类名称。

Unity 将此 USS 类添加到 BaseVerticalCollectionView 中的每个奇数项中,当
BaseVerticalCollectionView.showAlternatingRowBackgrounds属性设置为ContentOnlyAll.当showAlternatingRowBackgrounds属性设置为这些值中的任何一个,则奇数项的显示背景颜色与偶数项不同。该 USS 级用于区分奇数项目和偶数项目。当showAlternatingRowBackgrounds属性设置为None,则不会添加 USS 类,并且依赖它的任何样式或行为都将失效。
listScrollViewUssClassName .unity-collection-view__scroll-view BaseVerticalCollectionView 中滚动视图的 USS 类名称。

Unity 将此 USS 类添加到 BaseVerticalCollectionView 的滚动视图中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个 BaseVerticalCollectionView 滚动视图。
disabledUssClassName .unity-disabled 本地禁用元素的 USS 级名称。

您还可以使用 Inspector 或 UI Toolkit Debugger 中的 Matching Selectors 部分来查看哪些 USS 选择器会影响VisualElement在其层次结构的各个层面。

其他资源

朗菲尔德
MaskField (遮罩字段)