c# - 在哪里可以找到 WPF TreeView 的度量值?
问题描述
我想通过将节点设计为使用 HierarchicalDataTemplate 实现的单个视图来制作一个非常特殊的树视图:
<!-- ... -->
<TreeView ItemsSource="{Binding Path=ContentFrom}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding ChildNodes}" >
<local:IndividualTreeNodeView />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<!-- ... -->
现在的问题是,我需要更多的信息,而不仅仅是树视图的大小来设计IndividualTreeNodeView权利。我需要从边界到第一个节点的距离,以及树节点每个级别的“深度”。
从截图中我看到第一个没有插入 22 像素,每个级别还有 19 像素。但我不想检查屏幕截图。
这些值是否可以从 TreeView 或其他地方读取?
解决方案
它不是解决这个问题的最优雅的方法,但这应该会有所帮助:
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;
}
不幸的是,没有参数可以直接超出以获得“深度”
推荐阅读
- java - 如何加载外部java类并调用带参数的方法
- for-loop - 带有 Scrapy 的 For 循环
- database - 数据库命名,最佳实践
- java - Selenium - IllegalAccessError
- c - 如何在 CAPL 中包含 .dll 文件?
- mongodb - 更新 mongodb 中的列数据类型
- java - 为什么我无法到达对象数组中的对象实例?
- ios - Swift Eureka 自定义单元格图片全屏
- c++ - 卡萨布兰卡 test_runner 因 std::bad_alloc 而失败
- java - 在 Android 项目中添加 API 27 支持会产生错误