1

我正在寻找一种方法来绘制虚线以连接 wpf 中的节点TreeView。问题似乎是我正在使用HierarchicalDataTemplate而不是填充TreeViewwith TreeViewItems。

我找到了这篇文章: http ://social.msdn.microsoft.com/forums/en-US/wpf/thread/30cb182c-9419-40bd-946e-87971515fb95/

Witch 在填充它TreeViewItem的情况下很好地解决了它,但我的问题是,我将如何解决它HierarchicalDataTemplate

我的模板看起来像这样:

<HierarchicalDataTemplate DataType = "{x:Type Team}" ItemsSource ="{Binding Path=Players">
   <TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>

<DataTemplate  DataType = "{x:Type Player}">
   <TextBlock Text="{Binding Path=Name}" />
</DataTemplate >

关于如何解决问题的任何解决方案或好的提示?

4

2 回答 2

1

在我看来,最简单的方法是在 itemstyle 中添加代码

<HierarchicalDataTemplate.ItemContainerStyle>
   <Style TargetType="{x:Type TreeViewItem}">
      <!--your style-->
   </Style>
</HierarchicalDataTemplate.ItemContainerStyle>
于 2011-01-07T10:05:40.923 回答
0

在我看来,解决此类问题的最简单方法是:

  1. 实现可以包含在 ItemTemplate 中的装饰器“ConnectingLineDecorator”。
  2. 定义继承的附加属性 ConnectingLineDecorator.ParentDecorator。
  3. 在 MeasureOverride 做一个SetParentDecorator(Child, this)这样后代装饰器可以找到他们的父母
  4. 在 ParentDecorator 属性的 PropetyChangedCallback 中,添加将每个装饰器注册到其 ParentDecorator 的代码,从而创建装饰器树。
  5. 每当装饰器的后代装饰器发生变化时,安排一个调度程序回调来重新计算哪些子装饰器需要显示行以及这些行应该多长。
  6. 对每个装饰器使用 Adorner 来检测绝对位置的变化。当装饰器相对于其父级移动时,安排相同的 Dispatcher 回调以重新计算行
  7. 在 OnRender 中实际使用最新的线条数据渲染线条(或者这可以在 Adorner 中完成,但如果是这样,您需要确保 AdornerLayer 处于正确的级别)

这种方法不需要太多代码并且完全可靠,因为它不关心您使用的是哪种面板、滚动是如何工作的,甚至不关心树的实际构建方式。装饰器只知道它的工作并做到了:它只是在自己和它的祖先装饰器之间画线。

于 2010-11-12T21:19:44.837 回答