折叠后的TreeViewItem在画布上的实际位置

时间:2019-01-10 11:42:05

标签: c# wpf visibility treeviewitem

如果折叠了TreeViewItem的父TreeViewItem(意味着<ParentTreeViewItem>.IsExpanded = false;),是否有办法评估它在Canvas上的实际位置?调试时,父项的ItemsHost中折叠项的“可见性”或“位置”信息似乎都没有更新。

感谢任何提示!

干杯,亚历克斯

1 个答案:

答案 0 :(得分:0)

找到了解决此问题的方法:

基本上,每当TreeViewItem触发OnCollapsedOnExpanded事件时,我都会强制所有其他TreeViewItem根据其祖先的IsExpanded属性确定自己的位置,直到树的根。

如果任何祖先折叠(例如IsExpanded == false),我会将其位置应用于当前TreeViewItems位置。

如果没有一个祖先折叠,则应用其自己的位置(而位置是TreeViewItem的自定义Point属性)。

代码示例:

private Point DeterminePosition()
    {
        Point point = this.position;

        if (ParentTreeViewItem != null)
        {
            MyTreeViewItem parent = null, lastCollapsed = null;

            parent = ParentTreeViewItem;

            while (parent != null)
            {
                if (parent.IsExpanded == false)
                {
                    lastCollapsed = parent;
                }

                parent = parent.ParentTreeViewItem;
            }


            if (lastCollapsed != null)
            {
                point = new Point(position.X, lastCollapsed.Position.Y);
            }

        }

        return point;
    }