TreeView最簡單的使用,按層次結構展示
阿新 • • 發佈:2022-03-23
# 展示TreeView的視窗
class SimpleTreeViewWindow : EditorWindow { [MenuItem("TreeView Examples/Simple Tree View Window")] static void ShowWindow() { var window = GetWindow<SimpleTreeViewWindow>(); window.titleContent = new GUIContent("My Window"); window.Show(); } SimpleTreeView _tableView; TreeViewState _treeViewState;private void OnEnable() { if (null == _treeViewState) _treeViewState = new TreeViewState(); //單獨用一個類, 以便於序列化狀態 _tableView = new SimpleTreeView(_treeViewState); } private void OnGUI() { var xMargin = 10; var yMargin = 10; var rect = newRect(xMargin, yMargin, position.width - xMargin * 2, position.height - yMargin * 2); _tableView.OnGUI(rect); } }
# TreeView
(#) BuildRoot必須重寫
(#) 沒有重寫RowGUI的情況下,預設實現將直接用Label展示TreeViewItem的displayName
class SimpleTreeView : TreeView { public SimpleTreeView(TreeViewState state) :base(state) { //rowHeight = 35; showAlternatingRowBackgrounds = true; //隔行顯示顏色 showBorder = true; //表格邊框 Reload(); } protected override TreeViewItem BuildRoot() { var rootTreeViewItem = new TreeViewItem(-1, -1); //root的depth必須為-1 var rows = new List<TreeViewItem>(); for (var i = 0; i < 10; ++i) { rows.Add(new TreeViewItem(i, i % 3, $"index {i}")); } SetupParentsAndChildrenFromDepths(rootTreeViewItem, rows); //根據depth自動調整TreeViewItem間的父子關係 return rootTreeViewItem; } }
# 效果圖