1. 程式人生 > 其它 >TreeView最簡單的使用,按層次結構展示

TreeView最簡單的使用,按層次結構展示

 

# 展示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 = new
Rect(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; } }

 

# 效果圖