首页 > 解决方案 > 在哪里可以找到 WPF TreeView 的度量值?

问题描述

我想通过将节点设计为使用 HierarchicalDataTemplate 实现的单个视图来制作一个非常特殊的树视图:

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

现在的问题是,我需要更多的信息,而不仅仅是树视图的大小来设计IndividualTreeNodeView权利。我需要从边界到第一个节点的距离,以及树节点每个级别的“深度”。

在此处输入图像描述

从截图中我看到第一个没有插入 22 像素,每个级别还有 19 像素。但我不想检查屏幕截图。

这些值是否可以从 TreeView 或其他地方读取?

标签: c#wpfxaml

解决方案


它不是解决这个问题的最优雅的方法,但这应该会有所帮助:

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

返回树视图的位置

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

返回 treeViewItem 的位置,结果为您提供它们的 delta (p0.X-p1.X),然后您可以在 TreeView 中计算其“深度”

或者,您可以尝试使用循环和 Control.Parent 从 TreeViewItem 开始爬上可视化树,以计算上面的 TreeViewItems 以在您点击 treeView 之前获得其“深度”(代码未在我的手机上测试过)

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

        }

不幸的是,没有参数可以直接超出以获得“深度”


推荐阅读