私はTreeViewItemとControlTemplatesを使用するWebサイトを見ましたが、現時点では見つけられません。私はCodeProject上にあったと思います。
私が最近使っていたもう一つのアイデアは、2つのusercontrols、itemcontrols、およびstackpanelsを使用することです。
ここには、その下にテキストを含むOrgBar矩形の例があり、ItemSourceを子コレクションに再帰的に設定することによって、OrgGroupコントロール内の子をレンダリングします。ルートorgbarをキャンバスに置いて、矢印のパスで遊ぶことができます。私は基本を指摘しようとしましたが、もっと必要があれば空白を記入することができます。 Paullyが提案のように、私はTreeViewコントロール(シルバーツールキット)で始まり、コントロールテンプレートをカスタマイズして、自分自身をツリービューますので、基本的にツリー構造です
Public Class OrgBarDataNode
Public Property BarColor as New SolidColorBrush(Colors.Red)
Public Property BarName As String
Public Property Children as New ObservableCollection(Of OrgBarDataNode)
End Class
Class MainPage
...
Public Sub Loaded
Dim Root as New OrgBarDataNode With {.BarName = "Root"}
Dim Child1 as New OrgBarDataNode With {.Barname = "Child1"}
Root.Children.Add(Child1)
LayoutRoot.Children.Add(Root)
End Sub
...
End Class
<UserControl x:Class="OrgBar">
<Grid>
<StackPanel ToolTipService.ToolTip="{Binding BarName}" Cursor="Hand">
<Rectangle Fill="{Binding BarColor}" Style="{StaticResource RecStyle}"/>
<TextBlock Text="{Binding BarName}" HorizontalAlignment="Center"
Margin="0,10,0,0" />
<local:OrgGroup Margin="0,20" HorizontalAlignment="Center"
DataContext="{Binding Children}" />
</StackPanel>
</Grid>
</UserControl>
<UserControl x:Class="OrgGroup">
<Grid>
<!-- this {Binding} to nothing means bind to DataContext}-->
<ItemsControl ItemsSource="{Binding}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:OrgBar Style="{StaticResource OrgBarStyle}"
DataContext="{Binding}" />
<!-- this {Binding} refers to the the child node this time} -->
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</UserControl>