Version: 6000.3
语言: 中文
多列列表视图
对象字段

多列树视图

一个MultiColumnTreeView是一个 UI 控件,通常用于显示具有多列的表格或类似网格的数据。使用MultiColumnTreeView以结构化格式呈现数据,其中每行代表一个项或条目,每列表示该项的特定属性或属性。

MultiColumnTreeView 示例
MultiColumnTreeView 示例

创建 MultiColumnTreeView

你可以使用 UXML 和 C# 创建 MultiColumnTreeView。以下 C# 示例创建具有两列的 MultiColumnTreeView:

var multiColumnTreeView = new MultiColumnTreeView();
multiColumnTreeView.columns.Add(new Column { title = "Name", width = 20 });
multiColumnTreeView.columns.Add(new Column { title = "Power", width = 80 });

刷新集合视图

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

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

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

将 MultiColumnTreeView 绑定到数据

您可以绑定MultiColumnTreeView到数据源,并根据提供的数据自动填充行和列。有关示例,请参阅创建列表视图和树视图

对 MultiColumnTreeView 进行排序

可以使用默认算法为 MultiColumnTreeView 启用排序,或者如果默认排序作速度不足以满足需求,则可以实现自定义算法。

启用排序后,要按单列排序,请单击列标题。要对多列进行排序,请按住 Ctrl 键(macOS:Cmd)并单击。要禁用排序,请按住 Shift 键并单击。

默认排序

要使用默认算法启用排序,请将sortingMode属性设置为ColumnSortingMode.Default,并实现Column.comparison按源中的索引比较两个项目。

有关示例,请参阅 MultiColumnTreeView 默认排序示例

自定义排序

要实现自定义排序,请将sortingMode属性设置为ColumnSortingMode.Custom,并实现columnSortingChanged回调。在回调中,使用sortColumns相应地重新排序您的列表并触发RefreshItems()一旦项目的来源更新。

sortColumns属性是排序列的当前状态:它按排序顺序列出列。如果按第 1 列、第 2 列、第 3 列排序,则sortedColumnslist 是 [1, 2, 3]。如果按第 3 列排序,然后按第 2 列排序,然后按第 1 列排序,则sortedColumnslist 是 [3, 2, 1]。

实现 MultiColumnTreeView 的拖放作

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

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

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

MultiColumnTreeView 常见问题解答

下面是有关 MultiColumnTreeView 控件的一些常见问题:

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

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

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

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

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

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

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

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

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

没有专用的 API。您可以使用column.bindCellcolumn.unbindCell以跟踪其中一列上的索引。

如何从 ID 转换为索引,反之亦然?

BaseTreeViewController.GetIndexForIdBaseTreeViewController.GetIdForIndex.

我可以有一个水平的 MultiColumnTreeView 吗?

MultiColumnTreeView 控件不支持水平布局和虚拟化。建议将 ScrollView 与flex-direction: row水平布局元素。

例子

C# 基类和命名空间

C# 类MultiColumnTreeView
命名空间UnityEngine.UIElements
基类BaseTreeView

成员 UXML 属性

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

名字 类型 描述
columns UIElements.Columns+UxmlSerializedData 多列标题的列集合。
sort-column-descriptions UIElements.SortColumnDescriptions+UxmlSerializedData 默认情况下排序列的集合。
sorting-enabled boolean 是否在多列标题中启用排序。这已弃用。 用sortingMode相反。
sorting-mode UIElements.ColumnSortingMode 指示如何对列进行排序。要启用排序,请将其设置为ColumnSortingMode.DefaultColumnSortingMode.Custom. 这Defaultmode 使用MultiColumnController,作用于索引。您还可以使用Custom模式,通过响应columnSortingChanged事件。

注意:如果至少有一个排序列,则暂时禁用重新排序。

继承的UXML属性

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

名字 类型 描述
auto-expand boolean 如果为 true,则项在添加到 TreeView 时会自动展开。
binding-path string 要绑定的目标属性的路径。
fixed-item-height float 列表中单个项目的高度,以像素为单位。

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

只有当元素的 canGrabFocus 属性为 true 时,才能聚焦该元素。
horizontal-scrolling boolean 此属性控制集合视图在内容不适合可见区域时是否显示水平滚动条。
reorderable boolean 获取或设置一个值,该值指示用户是否可以拖动列表项以对其进行重新排序。
默认值
false它允许用户在实现时将项目拖入其他视图或从其他视图拖动canStartDrag,setupDragAndDrop,dragAndDropUpdatehandleDrop. 将此值设置为true以允许用户对列表中的项目重新排序。
selection-type UIElements.SelectionType 控制选择类型。

默认值为
SelectionType.Single. 将集合视图设置为禁用选择时,将清除所有当前选择。
show-alternating-row-backgrounds UIElements.AlternatingRowBackground 此属性控制集合视图行的背景颜色是否交替。从AlternatingRowBackground枚举。
show-border boolean 启用此属性可在集合视图周围显示边框。

如果设置为 true,则集合视图在内部使用的 ScrollView 周围显示边框。
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-tree-view TreeView 元素的 USS 类名称。

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

Unity 将此 USS 类添加到 TreeView 的每个项目元素中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个项。
itemToggleUssClassName .unity-tree-view__item-toggle TreeView 项切换元素的 USS 类名称。

Unity 将此 USS 类添加到 TreeView 的每个项目切换元素中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个项。
itemIndentsContainerUssClassName .unity-tree-view__item-indents TreeView 缩进容器元素的 USS 类名称。

Unity 将此 USS 类添加到 TreeView 的每个缩进容器元素中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个项。
itemIndentUssClassName .unity-tree-view__item-indent TreeView 缩进元素的 USS 类名称。

Unity 将此 USS 类添加到 TreeView 的每个缩进元素中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个项。
itemContentContainerUssClassName .unity-tree-view__item-content TreeView 项容器元素的 USS 类名称。

Unity 将此 USS 类添加到 TreeView 的每个项目容器元素中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个项。
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 会在拖动时将此 USS 类添加到项目元素中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个 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在其层次结构的各个层面。

其他资源

多列列表视图
对象字段