Где найти меры WPF TreeView? - PullRequest
       23

Где найти меры WPF TreeView?

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

Я хочу создать очень особенное древовидное представление, создав узлы как отдельные представления, реализованные с использованием HierarchicalDataTemplate:

<!-- ... -->
<TreeView ItemsSource="{Binding Path=ContentFrom}">
  <TreeView.ItemTemplate>
      <HierarchicalDataTemplate ItemsSource="{Binding ChildNodes}" >
          <local:IndividualTreeNodeView />
      </HierarchicalDataTemplate>
  </TreeView.ItemTemplate>
</TreeView>
<!-- ... -->

Проблема сейчас в том, что мне нужно больше информации, чем только размер древовидного представления для проектирования IndividualTreeNodeView . Мне нужно расстояние от первого узла до границы и «глубина» каждого уровня узла дерева.

enter image description here

Из скриншотов я вижу, что первый не имеет вставки по 22px, а каждый уровень еще по 19px. Но я не хочу проверять скриншоты.

Где эти значения доступны для чтения из TreeView или где-то еще?

1 Ответ

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

Это не самый элегантный способ решить эту проблему, но это должно помочь:

            Point p0 = YourTreeView.PointToScreen(new Point());

возвращает позицию дерева

            Point p1 = YourTreeViewItem.PointToScreen(new Point());

возвращает положение treeViewItem результат дает вам их дельту (p0.X-p1.X), и из этого вы можете вычислить его «глубину» в TreeView

В качестве альтернативы вы можете попытаться взобраться на визуальное дерево, начиная с TreeViewItem, используя цикл и Control.Parent, чтобы подсчитать TreeViewItems выше, чтобы получить его «глубину» до того, как вы нажмете на treeView (код не проверен im на моем телефоне)

        TreeViewItem item = YourTreeViewItem;
        int depth = 0;
        while(item.Parent.GetType() != typeof(TreeView))
        {
            depth++;
            item = item.Parent as TreeViewItem;

        }

к сожалению, нет параметра, который можно напрямую увеличить, чтобы получить «глубину»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...