用于连接wpf TreeView中的节点的虚线

时间:2010-11-10 09:59:55

标签: wpf .net-4.0 treeview styles hierarchicaldatatemplate

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

我发现这篇文章: 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 >

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

2 个答案:

答案 0 :(得分:0)

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

  1. 实现可以包含在ItemTemplate中的装饰器“ConnectingLineDecorator”。
  2. 定义一个继承的附加属性ConnectingLineDecorator.ParentDecorator。
  3. 在MeasureOverride中执行SetParentDecorator(Child, this),以便后代装饰者可以找到他们的父级
  4. 在ParentDecorator属性的PropetyChangedCallback中添加用于向每个装饰器注册其ParentDecorator的代码,创建一个装饰树。
  5. 每当装饰者的后代装饰者改变时,安排一个Dispatcher回调来重新计算哪些子装饰者需要显示行以及这些行应该多长。
  6. 使用每个装饰器的装配器来检测绝对位置变化。当装饰器相对于其父级移动时,安排相同的Dispatcher回调重新计算行
  7. 在OnRender中实际使用最新的行数据渲染行(或者这可以在Adorner中完成,但如果是这样,则需要确保AdornerLayer处于正确的级别)
  8. 这种方法不需要太多代码,并且完全可靠,因为它不关心您使用的是哪种面板,滚动如何工作,甚至不是如何实际构建树。装饰者只知道它的工作并做到了:它只是在它自己和它的祖先装饰者之间绘制线条。

答案 1 :(得分:0)

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

<HierarchicalDataTemplate.ItemContainerStyle>
   <Style TargetType="{x:Type TreeViewItem}">
      <!--your style-->
   </Style>
</HierarchicalDataTemplate.ItemContainerStyle>