一个可垂直滚动区域,仅为可见项创建视觉元素,同时允许绑定更多项。当用户滚动时,视觉元素被回收并重新绑定到新数据项。
using System; using System.Collections.Generic;
using UnityEditor; using UnityEngine; using UnityEngine.UIElements;
namespace UIElementsExamples { public class ListViewExampleWindow : EditorWindow { [MenuItem("Window/ListViewExampleWindow")] public static void OpenDemoManual() { GetWindow<ListViewExampleWindow>().Show(); }
public void OnEnable() { // Create some list of data, here simply numbers in interval [1, 1000] const int itemCount = 1000; var items = new List<string>(itemCount); for (int i = 1; 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) => (e as Label).text = items[i];
// Provide the list view with an explict height for every row // so it can calculate how many items to actually display const int itemHeight = 16;
var listView = new ListView(items, itemHeight, makeItem, bindItem);
listView.selectionType = SelectionType.Multiple;
listView.onItemChosen += obj => Debug.Log(obj); listView.onSelectionChanged += objects => Debug.Log(objects);
listView.style.flexGrow = 1.0f;
rootVisualElement.Add(listView); } } }
itemSelectedVariantUssClassName | 在选择时,此类型元素中项元素的 USS 类名称。 |
itemUssClassName | 此类型元素中项元素的 USS 类名称。 |
ussClassName | 此类型元素的 USS 类名称。 |
bindItem | 用于将数据项绑定到视觉元素的回调。 |
itemHeight | ListView 要求所有视觉元素具有相同的高度,以便可以计算合理的滚动条大小。必须设置此属性才能使列表视图正常运行。 |
itemsSource | 项数据源。必须设置此属性才能使列表视图正常运行。 |
makeItem | 用于构造 VisualElement(将用作列表中每个回收和重新绑定的元素的模板)的回调。必须设置此属性才能使列表视图正常运行。 |
selectedIndex | 项源中当前所选的项索引。如果选择了多项,则会返回第一个所选项的索引。 |
selectedItem | 项源中当前所选的项。如果选择了多项,则会返回第一个所选项。 |
selectionType | 控制选择状态,是否:已禁用选择,只有一个可选项,或者是否有多个可选项。 |
Refresh | 清除,重新创建所有可见的视觉元素,并重新绑定所有项。每当项源发生变化时,就应该调用此方法。 |
ScrollTo | 滚动到特定视觉元素。 |
ScrollToItem | 滚动到特定项索引并使其可见。 |
onItemChosen | 选择某个项(双击)时的回调。这与直接选择不同。 |
onSelectionChanged | 用于选择更改的回调。 |
disabledUssClassName | 本地禁用元素的 USS 类名称。 |
binding | 要更新的绑定对象。 |
bindingPath | 要绑定的目标属性的路径。 |
canGrabFocus | 如果元素可以获得焦点,则返回 true。 |
delegatesFocus | 元素是否应将焦点委托给其子项。 |
focusable | 如果元素可以获得焦点,则为 true。 |
focusController | 返回此元素的焦点控制器。 |
tabIndex | 用于对焦点环中可获得焦点的元素排序的整数。必须大于或等于零。 |
childCount | 此对象的 contentContainer 中的子元素数 |
contentContainer | 子元素通常添加到此元素中 |
customStyle | 返回元素的自定义样式属性访问器。 |
enabledInHierarchy | 如果 VisualElement 是在它自己的层级视图中启用,则返回 true。 |
enabledSelf | 如果 VisualElement 是本地启用,则返回 true。 |
experimental | 返回 UIElements 实验性接口。 |
generateVisualContent | 在需要(重新)生成 VisualElement 可视内容时调用。 |
hierarchy | 访问此元素物理层级视图 |
pickingMode | 确定在 mouseEvents 或 IPanel.Pick 查询期间是否可以选取此元素。 |
resolvedStyle | 返回 VisualElement 解析的样式值。 |
schedule | 检索此 VisualElement 的 IVisualElementScheduler |
style | 引用此元素的样式对象。 |
styleSheets | 返回一个 VisualElementStyleSheetSet,用于操作附加到此元素的样式表。 |
this[int] | 访问此元素物理层级视图 |
tooltip | 用户将元素悬停一小段时间后显示在信息框内的文本。 |
usageHints | 提示值的组合,用于指定 VisualElement 的高级预期使用模式。 仅当 VisualElement 尚未成为 Panel 的一部分时,才可以设置此属性。一旦成为 Panel 的一部分,此属性实际上会变为只读状态,尝试更改它将抛出异常。 适当的 UsageHints 的规范会促使系统根据预期的使用模式更好地决定如何处理或加速某些操作。 请注意,这些提示不影响行为或视觉效果,而只影响面板及其内部元素的总体性能。 通常,建议始终考虑指定适当的 UsageHints,但请注意,在某些情况下(例如,由于目标平台的硬件限制),一些 UsageHints 可能会被内部忽略。 |
userData | 此属性可用于将特定于应用程序的用户数据与此 VisualElement 关联。 |
viewDataKey | 用于查看数据持久性(即树展开状态、滚动位置、缩放级别)。 |
HandleEvent | 处理事件,通常是通过执行与事件关联的回调处理事件。 |
HasBubbleUpHandlers | 如果事件传播 BubbleUp 阶段的事件处理程序已附加到此对象,则返回 true。 |
HasTrickleDownHandlers | 如果事件传播 TrickleDown 阶段的事件处理程序已附加到此对象,则返回 true。 |
RegisterCallback | 向实例添加事件处理程序。如果已为同一阶段(TrickleDown 或 BubbleUp)注册了事件处理程序,则此方法没有效果。 |
SendEvent | 将事件发送到事件处理程序。 |
UnregisterCallback | 从此实例删除回调。 |
Blur | 通知元素释放焦点。 |
Focus | 尝试让此元素获得焦点。 |
Add | 向此元素的 contentContainer 添加一个元素 |
BringToFront | 将此元素放到其父子列表的末尾。此元素将显示在所有重叠的同级元素前方。 |
Children | 从元素的 contentContainer 返回元素 |
Clear | 从此元素的 contentContainer 中删除所有子元素 |
Contains | 如果元素是此 VisualElement 的直接子级,则返回 true |
ElementAt | 检索相应位置的子元素 |
EnableInClassList | 启用或禁用具有给定名称的类。 |
FindAncestorUserData | 向上搜索此 VisualElement 的层级视图并检索存储的 userData(如果找到)。 |
FindCommonAncestor | 查找 VisualTree 层级视图中两个 VisualElement 之间的最低共同上级 |
GetClasses | 获取此元素的类。 |
GetFirstAncestorOfType | 从此元素的父级开始向上访问层级视图,返回第一个此类型的 VisualElement |
GetFirstOfType | 从此元素开始向上访问层级视图,返回第一个此类型的 VisualElement |
IndexOf | 检索指定的 VisualElement 的子索引。 |
Insert | 向此元素的 contentContainer 插入一个元素 |
MarkDirtyRepaint | 在下一帧触发 VisualElement 的重绘。 |
PlaceBehind | 将此元素放在其父子列表中同级元素之前紧邻的位置。如果此元素和同级元素位置重叠,此元素将显示在其同级元素之后。 |
PlaceInFront | 将此元素放在其父子列表中同级元素之后紧邻的位置。如果此元素和同级元素位置重叠,此元素将显示在其同级元素之前。 |
Remove | 从层级视图中删除此子级 |
RemoveAt | 从此元素的 contentContainer 中删除位于此位置的子元素 |
RemoveFromHierarchy | 将此元素从其父层级视图中删除 |
SendEvent | 将事件发送到事件处理程序。 |
SendToBack | 将此元素发送到其父子列表的开始处。此元素将显示在所有重叠的同级元素之后。 |
SetEnabled | 更改 VisualElement 启用状态。禁用的 VisualElement 不接收大多数事件。 |
Sort | 重新排序来自此 VisualElement contentContainer 的子元素。 |
ToggleInClassList | 在类列表中添加和删除给定类名之间切换。 |