Фактическая позиция свернутого TreeViewItem на холсте - PullRequest
0 голосов
/ 10 января 2019

Есть ли способ оценить фактическое положение TreeViewItem на холсте, если его родительский TreeViewItem свернут (что означает <ParentTreeViewItem>.IsExpanded = false;)? При отладке, по-видимому, не обновляются ни информация о видимости, ни информация о положении свернутого элемента в элементе ItemsHost у родителя.

Ценю любую подсказку!

Ура, Алекс

1 Ответ

0 голосов
/ 11 января 2019

Найден обходной путь для этой проблемы:

Обычно, когда TreeViewItem запускает событие OnCollapsed или OnExpanded, я заставляю все другие TreeViewItem определять свою собственную позицию на основе свойства IsExpanded своих предков вплоть до корня дерева.

Если любой из предков свернут (т.е. IsExpanded == false), я применяю его позицию к текущей позиции TreeViewItems.

Если ни один из предков не свернут, я применяю свою собственную позицию (тогда как позиция - это пользовательское свойство Point 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;
    }
...