Canvas 上折叠的 TreeViewItem 的实际位置

Actual position of collapsed TreeViewItem on Canvas

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

感谢任何提示!

干杯,亚历克斯

找到解决此问题的方法:

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

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

如果 none 的祖先被折叠,我应用它自己的位置(而位置是 TreeViewItem 的自定义点 属性)。

代码示例:

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;
    }