包含此页的版本:
不含此页的版本:
ListView 是一个垂直滚动的区域,它链接到并显示项列表。
注意:水平和垂直滚动器元素是标准的 UI 工具包滚动器。
你可以使用 UI Builder、UXML 和 C# 创建 ListView。以下 C# 示例创建 ListView:
var listView = new ListView();
您可以使用ScrollView一种 UI 控件,用于在可视区域中显示大量控件,您可以使用滚动条查看这些控件。更多信息
请参阅术语表控件创建与使用 ListView 相同的功能。但是,执行以下作时,ListView 比 ScrollView 更有效:
VisualElement类。您可以设置外观样式、定义行为并将其作为 UI 的一部分显示在屏幕上。更多信息若要刷新集合视图,可以调用RefreshItems/RefreshItem或Rebuild.
通常,调用RefreshItems或RefreshItem方法——这些方法仅刷新集合视图,并且成本较低。如果您调用Rebuild,则集合视图将完全重建,这可能会很昂贵。
但是,您必须调用Rebuild在以下情况下:
List<float>设置为List<Vector3>.makeItem或destroyItem.若要更改项高度用于驱动内容的方式,请使用 VirtualizationMethod:
VirtualizationMethod.FixedHeight将所有项目设置为相同的高度。VirtualizationMethod.DynamicHeight允许项目具有不同的高度。ListView 具有内置的子 ScrollView 元素,允许用户滚动浏览列表。您可以通过以下方式控制滚动速度覆盖mouseWheelScrollSize,horizontalPageSize和verticalPageSize使用 C 的 ScrollView 属性#.
默认情况下,ListView 控件不可重新排序。要使其可重新排序,请将reorderable属性设置为true在UI Builder、UXML或C#中。
listView.reorderable = true;
拖放是 UI 设计中的常见功能。若要实现拖放作,请重写以下方法:
canStartDrag.setupDragAndDrop.dragAndDropUpdate.您可以根据拖动位置或其他条件执行某些作。handleDrop.在拖放作中,您可以通过拖动来启用项目的重新排序。要启用,请将reorderable属性设置为true在UI Builder、UXML和C#中。
有关示例,请参阅在窗口之间创建拖放列表和树视图。
下面是有关 ListView 控件的一些常见问题。
是否可以获取视图中可见的行列表?
没有专用的 API。您可以使用 UQuery 检索感兴趣的元素。
视图控制器的任何被覆盖函数是否必须调用base.Method?
仅当要扩展其默认行为时,才调用此方法。
我已向我的行添加了一个 Toggle。为什么当用户选择选择时,选择不跳转到该行?
默认情况下,仅当行的内容未使用鼠标向下事件时,才会选择该行。在这种情况下,您的 Toggle 会停止事件传播。要解决此问题,请注册一个PointerDownEvent回调为TrickleDown在切换调用SetSelection.
当用户更改视图中的选择时,如何接收回调?
建议使用selectedIndicesChanged回调以在需要时按索引检索数据。虽然您也可以使用selectionChanged,请注意,它返回一个对象列表,这在与值类型一起使用时可能会导致装箱分配。
我可以获取屏幕上可见的行的索引吗?
没有专用的 API。您可以使用bindItem和unbindItem回调来跟踪这些索引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 工具包>示例。 有关更多示例,请参阅以下内容:
GameSwitch对象。
C# 类:ListView
命名空间:UnityEngine.UIElements
基类:BaseListView
此元素具有以下成员属性:
| 名字 | 类型 | 描述 |
|---|---|---|
item-template |
UIElements.VisualTreeAsset |
一个UXML模板,用于构造列表中的每个回收和回弹元素。此模板旨在将makeItem定义。您可以将其与 BaseListView.bindingSourceSelectionMode和绑定,以实现完全无代码的工作流程。 |
此元素从其基类继承以下属性:
| 名字 | 类型 | 描述 |
|---|---|---|
allow-add |
boolean |
此属性允许用户在单击“添加按钮”时允许或阻止添加项目。它必须返回true或false.如果回调未设置为 false,则允许任何 Add作。 |
allow-remove |
boolean |
此属性允许用户在单击“删除”按钮时允许或阻止删除项目。它必须返回true或false.如果属性未设置为 false,将允许任何删除作。 |
binding-path |
string |
要绑定的目标属性的路径。 |
binding-source-selection-mode |
UIElements.BindingSourceSelectionMode |
此属性控制列表中的每个元素是否会自动将其数据源设置获取到集合源中的正确项。 当设置为 AutoAssign,则无需指定绑定回调,因为绑定可用于填充元素。 |
fixed-item-height |
float |
列表中单个项目的高度(以像素为单位)。 使用 virtualizationMethod设置为FixedHeight,以便集合视图正常运行。如果设置在以下情况下virtualizationMethod是DynamicHeight,它作为默认高度,以帮助在布置项目之前计算所需项目的数量和可滚动区域。它应设置为项目的最小预期高度。 |
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,dragAndDropUpdate和handleDrop.将此值设置为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 |
指示元素文本的方向性。该值将传播到元素的子项。 设置 languageDirection自RTL只能获得文本反转等基本的 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 手册中的查看数据持久性。 |
下表列出了所有 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属性设置为ContentOnly或All.当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在其层次结构的各个层面。