如何使用Eto.Forms TreeGridView

3
我已经尝试了一段时间,但似乎无法弄清楚如何让Eto.Forms TreeGridView控件正确呈现。目前我只是尝试添加几个GridViewItem,但我只得到了一个小的灰色条:

enter image description here

这是我的代码:

        List<ITreeGridItem> treeGridItems = new List<ITreeGridItem>();
        foreach (var contentType in contentTypes)
        {
            treeGridItems.Add(new TreeGridItem(contentType.Name));
        }

        Content = new DocumentPage(new TreeGridView
        {
            DataStore = new TreeGridItemCollection(treeGridItems)

        }, new Padding(20));

我甚至不确定从哪里开始,我现在只想获得一棵树,每个节点都有文本显示,但我甚至做不到这一点。


我也迷失了!在他们的Git Wiki上,有关于GridView的文档,但是没有关于TreeGridView的...你有什么想法吗? - brainsandwich
1
我已经取得了一些进展,很快就会发布答案。 - The Pax Bisonica
@brainsandwich 抱歉让你等了几天,但我刚刚发布了答案,请问你有什么问题吗? - The Pax Bisonica
1个回答

3

经过一些尝试和错误,我弄清楚了如何使用树形视图:

 var treeGridView = new TreeGridView
        {
            BackgroundColor = Colors.White
        };

        treeGridView.Columns.Add(new GridColumn
        {
            HeaderText = "Content Type",
            DataCell = new TextBoxCell(0)
        });

        treeGridView.Columns.Add(new GridColumn
        {
            HeaderText = "Create",
            DataCell = new CustomCell
            {
                CreateCell = r =>
                {
                    TreeGridItem item = r.Item as TreeGridItem;

                    ContentTypeTag tag = (ContentTypeTag)item.Tag;
                    var contentType = _siteManager.CurrentSite.ContentTypes.First(x => x.Name.Equals(tag.ClassName));

                    void Click(object btnSender, EventArgs btnArgs)
                    {
                        //Your Event
                    }

                    var button = new LinkButton
                    {
                        Style = "primary-link-btn",
                        Text = $"Create {contentType.Name.ToSentenceCase()}",
                        Command = new Command(Click)
                    };

                    return button;
                }
            }
        });

        treeGridView.Columns.Add(new GridColumn
        {
            HeaderText = "Show All",
            DataCell = new CustomCell
            {
                CreateCell = r =>
                {
                    TreeGridItem item = r.Item as TreeGridItem;

                    ContentTypeTag tag = (ContentTypeTag)item.Tag;
                    var contentType = _siteManager.CurrentSite.ContentTypes.First(x => x.Name.Equals(tag.ClassName));

                    void Click(object btnSender, EventArgs btnArgs)
                    {
                       //Your Event
                    }

                    var button = new LinkButton
                    {
                        Style = "primary-link-btn",
                        Text = $"Show All {contentType.Name.ToSentenceCase()}",
                        Command = new Command(Click)
                    };

                    return button;
                }
            }
        });

            var treeGridItemCollection = new TreeGridItemCollection();
            foreach (var contentType in _siteManager.CurrentSite.ContentTypes)
            {
                var item = new TreeGridItem
                {
                    Values = new string[] { contentType.Name.ToSentenceCase(), "Create", "Show All" },
                    Tag = new ContentTypeTag
                    {
                        ClassName = contentType.Name
                    }
                };

                treeGridItemCollection.Add(item);
            }

            treeGridView.DataStore = treeGridItemCollection;

您需要首先创建表头列,然后创建TreeGridItemCollection并将数据存储设置为该集合。每行每列的值都在一个字符串数组中设置为TreeGridItem的Values属性。

1
好的,你一开始没有做的部分是添加GridColumns!谢谢你的回答 :) 我也看到你可以直接使用TreeGridItem而不是TreeGridItemCollection来定义数据(我不知道是否有缺点)。 - brainsandwich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接