MultiColumnTreeView
是一种 UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
参见 术语表 控件,通常用于显示具有多列的表格或网格状数据。使用 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
或 RefreshItem
方法。但是,在以下情况下,请改为调用 Rebuild
来刷新集合视图
List<float>
更改为 List<Vector3>
。makeItem
或 destroyItem
进行了更改。
注意:如果您调用 Rebuild
,则集合视图将完全重建,这可能代价很高。如果您调用 RefreshItems
或 RefreshItem
,则集合视图只会刷新,这代价较低。
您可以将 MultiColumnTreeView
绑定到数据源,并根据提供的数据自动填充行和列。有关示例,请参阅 创建列表和树视图。
您可以使用默认算法为 MultiColumnTreeView 启用排序,或者如果默认排序操作的速度不足以满足您的需求,则实现自定义算法。
启用排序后,要按单个列排序,请单击列标题。要对多列进行排序,请按住 Ctrl 键(macOS:Cmd)并单击。要禁用排序,请按住 Shift 键并单击。
要使用默认算法启用排序,请将 sortingMode
属性设置为 ColumnSortingMode.Default
,并实现 Column.comparison
以按其在源中的索引比较两个项目。
有关示例,请参阅 MultiColumnTreeView 默认排序示例。
要实现自定义排序,请将 sortingMode
属性设置为 ColumnSortingMode.Custom
,并实现 columnSortingChanged
回调。在回调中,使用 sortColumns
重新排序您的列表,并在项目源更新后触发 RefreshItems()
。
sortColumns
属性是已排序列的当前状态:它按排序顺序列出列。如果您按列 1 排序,然后按列 2 排序,然后按列 3 排序,则 sortedColumns
列表为 [1, 2, 3]。如果您按列 3 排序,然后按列 2 排序,然后按列 1 排序,则 sortedColumns
列表为 [3, 2, 1]。
拖放是 UI 设计中的一项常见功能。要实现拖放操作,请覆盖以下方法
canStartDrag
。setupDragAndDrop
。dragAndDropUpdate
。您可以根据拖动位置或其他条件执行某些操作。handleDrop
。在拖放操作期间,您可以通过拖动启用项目的重新排序。要启用,请在 UI Builder、UXML 和 C# 中将 reorderable
属性设置为 true
。
有关示例,请参阅 在窗口之间创建拖放列表和树视图。
以下是有关 MultiColumnTreeView 控件的一些常见问题
我如何获取屏幕上可见行的索引?
没有为此提供专门的 API。您可以使用 bindItem
和 unbindItem
回调来跟踪这些索引。
我如何获取视图中可见行的列表?
没有为此提供专门的 API。您可以使用 UQuery 检索感兴趣的元素。
视图控制器的任何覆盖函数是否必须调用 base.Method
?
仅当您希望扩展其默认行为时才调用此方法。
我在我的行中添加了一个切换按钮。为什么当用户选择它时,选择不会跳转到该行?
默认情况下,仅当鼠标按下事件未被行的内容使用时,才会选择该行。在这种情况下,您的切换按钮会停止事件传播。要解决此问题,请在切换按钮上使用 TrickleDown
注册一个 PointerDownEvent
回调,以调用 SetSelection
。
用户在视图中更改选择时,我如何接收回调?
建议使用 selectedIndicesChanged
回调在需要时按索引检索数据。虽然您也可以使用 selectionChanged
,但请注意,它返回一个对象列表,当与值类型一起使用时,可能会导致装箱分配。
我如何将 ID 转换为索引,反之亦然?
使用 BaseTreeViewController.GetIndexForId
和 BaseTreeViewController.GetIdForIndex
。
我可以有一个水平的 MultiColumnTreeView 吗?
MultiColumnTreeView 控件不支持水平布局和虚拟化。建议使用 ScrollView一种 UI 控件,在可视区域中显示大量控件,您可以使用滚动条查看这些控件。 更多信息
参见 术语表 以及 flex-direction: row
来水平布局元素。
C# 类:MultiColumnTreeView
命名空间:UnityEngine.UIElements
基类:BaseTreeView
此元素具有以下成员属性
名称 | 类型 | 描述 |
---|---|---|
columns |
UIElements.Columns+UxmlSerializedData |
多列标题的列集合。 |
sort-column-descriptions |
UIElements.SortColumnDescriptions+UxmlSerializedData |
默认情况下已排序的列的集合。 |
sorting-enabled |
布尔值 |
多列标题中是否启用了排序。已弃用。请改用 sortingMode 。 |
sorting-mode |
UIElements.ColumnSortingMode |
指示如何对列进行排序。要启用排序,请将其设置为 ColumnSortingMode.Default 或 ColumnSortingMode.Custom 。Default 模式使用 MultiColumnController 提供的排序算法,作用于索引。您还可以通过响应 columnSortingChanged 事件来使用 Custom 模式实现自己的排序。注意:如果至少有一列已排序,则暂时禁用重新排序。 |
此元素从其基类继承以下属性
名称 | 类型 | 描述 |
---|---|---|
auto-expand |
布尔值 |
如果为真,则在将项目添加到 TreeView 时自动展开项目。 |
binding-path |
字符串 |
要绑定的目标属性的路径。 |
fixed-item-height |
浮点数 |
列表中单个项目的的高度(以像素为单位)。 当使用 virtualizationMethod 设置为 FixedHeight 时,必须设置此属性,才能使集合视图正常工作。如果在 virtualizationMethod 设置为 DynamicHeight 时设置,则它用作默认高度,以帮助计算必要的项目数量和可滚动区域,然后才能布局项目。它应设置为项目的最小预期高度。 |
focusable |
布尔值 |
如果元素可以聚焦,则为真。 |
reorderable |
布尔值 |
获取或设置一个值,该值指示用户是否可以拖动列表项以重新排序它们。 默认值为 false ,它允许用户在您实现 canStartDrag 、setupDragAndDrop 、dragAndDropUpdate 和 handleDrop 时将项目拖到其他视图或从其他视图拖动项目。将此值设置为 true 以允许用户重新排序列表中的项目。 |
selection-type |
UIElements.SelectionType |
控制选择类型。 默认值为 SelectionType.Single 。当您将集合视图设置为禁用选择时,任何当前选择都将被清除。 |
show-alternating-row-backgrounds |
UIElements.AlternatingRowBackground |
此属性控制集合视图行的背景颜色是否交替。取自 AlternatingRowBackground 枚举的值。 |
show-border |
布尔值 |
启用此属性以在集合视图周围显示边框。 如果设置为 true,则在集合视图内部使用的 ScrollView 周围会出现边框。 |
tabindex |
整数 |
用于在焦点环中对可聚焦项进行排序的整数。必须大于或等于零。 |
virtualization-method |
UIElements.CollectionVirtualizationMethod |
当滚动条可见时,此集合要使用的虚拟化方法。取自 CollectionVirtualizationMethod 枚举的值。默认值为 FixedHeight 。使用固定高度时,请指定fixedItemHeight 属性。固定高度性能更高,但内容灵活性较差。使用DynamicHeight 时,集合将等待计算实际高度。动态高度更灵活,但性能较差。 |
此元素还从VisualElement
继承以下属性
名称 | 类型 | 描述 |
---|---|---|
content-container |
字符串 |
子元素添加到其中,通常与元素本身相同。 |
data-source |
对象 |
为该 VisualElement 指定数据源,覆盖任何继承的数据源。此数据源由所有子元素继承。 |
data-source-path |
字符串 |
从数据源到值的路径。 |
data-source-type |
System.Type |
可分配给此 VisualElement 的数据源的可能类型。 此信息仅供 UI 构建器使用,作为提示,以便在设计时无法指定有效数据源时,为数据源路径字段提供一些自动补全。 |
language-direction |
UIElements.LanguageDirection |
指示元素文本的方向性。该值将传播到元素的子元素。 将 languageDirection 设置为 RTL 通过反转文本并适当地处理换行和断字来添加对从右到左 (RTL) 的基本支持。但是,它不提供全面的 RTL 支持,因为这需要文本整形,包括字符的重新排序,以及 OpenType 字体功能支持。全面的 RTL 支持计划在未来的更新中提供,这将涉及用于处理语言、脚本和字体功能规范的其他 API。 为了增强此属性的 RTL 功能,用户可以探索 Unity Asset Store 中可用的第三方插件,并使用 ITextElementExperimentalFeatures.renderedText |
name |
字符串 |
此 VisualElement 的名称。 使用此属性编写针对特定元素的 USS 选择器。标准做法是为元素提供唯一的名称。 |
picking-mode |
UIElements.PickingMode |
确定此元素是否可以在鼠标事件或IPanel.Pick 查询期间被拾取。 |
style |
字符串 |
设置VisualElement 样式值。 |
tooltip |
字符串 |
在用户将鼠标悬停在元素上一段时间后,在信息框内显示的文本。这仅在编辑器 UI 中受支持。 |
usage-hints |
UIElements.UsageHints |
指定VisualElement 高级预期使用模式的提示值的组合。仅当VisualElement 尚未成为Panel 的一部分时,才能设置此属性。一旦成为Panel 的一部分,此属性实际上就成为只读属性,尝试更改它将引发异常。正确UsageHints 的规范使系统能够更好地决定如何根据预期的使用模式处理或加速某些操作。请注意,这些提示不会影响行为或视觉结果,而仅影响面板及其内部元素的整体性能。建议始终考虑指定正确的UsageHints ,但请记住,某些UsageHints 在某些条件下可能会被内部忽略(例如,由于目标平台上的硬件限制)。 |
view-data-key |
字符串 |
用于视图数据持久性,例如树展开状态、滚动位置或缩放级别。 此键用于从视图数据存储中保存和加载视图数据。如果未设置此键,则关联的 VisualElement 的持久性将被禁用。有关更多信息,请参阅视图数据持久性。 |
下表列出了所有 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,则 Unity 会将此 USS 类添加到 BaseVerticalCollectionView 元素的实例。应用于此类的任何样式都会影响视觉树中样式表旁边或下方的每个此类 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 类名。 当 BaseVerticalCollectionView.showAlternatingRowBackgrounds 属性设置为ContentOnly 或All 时,Unity 会将此 USS 类添加到 BaseVerticalCollectionView 中的每个奇数项目。当showAlternatingRowBackgrounds 属性设置为这两个值中的任何一个时,奇数项目将显示与偶数项目不同的背景颜色。此 USS 类用于区分奇数项目和偶数项目。当showAlternatingRowBackgrounds 属性设置为None 时,不会添加 USS 类,并且依赖于它的任何样式或行为都将失效。 |
listScrollViewUssClassName |
.unity-collection-view__scroll-view |
BaseVerticalCollectionView 中滚动视图的 USS 类名。 Unity 将此 USS 类添加到 BaseVerticalCollectionView 的滚动视图。应用于此类的任何样式都会影响视觉树中样式表旁边或下方的每个 BaseVerticalCollectionView 滚动视图。 |
disabledUssClassName |
.unity-disabled |
本地禁用元素的 USS 类名。 |
您还可以使用检查器或 UI 工具包调试器中的匹配选择器部分查看哪些 USS 选择器影响其层次结构中每个级别的VisualElement
的组件。