2009-09-05 11 views
0

この質問では、従業員、役職、部門の顔、そしてピナのコラダが好きか、雨の中で捉えられているかどうかを見てみたいとしましょう。Silverlightで組織図ビルダーを作成する場合は、グラフのボックスを作成するためにどの基本クラスを使用しますか?

おそらくそれは、次のようになります: http://www.edrawsoft.com/images/examples/Photo-Org-Chart-Full.png

あなたは...

  • System.Windows.Control.UserControlを使用しますか?
  • FrameworkElement?
  • UIElement?
  • キャンバス

なぜですか?いつものように、あなたの助言に感謝します!私は大いに感謝します!

答えて

2

高度なレイアウトのorgチャートコントロールを作成しなければならない場合は、おそらくControlから派生して、例えば「〜」と同様の方法で「本当の」テンプレートコントロールを作成します。 TreeViewコントロール。これはおそらく、新しいコントロールを作成するための最先端のルートですが、最も強力なものです。

ます。またTreeViewのコントロールテンプレートを変更し、それは左上隅から下中央から下方に成長の代わりに、左と作ることができるかもしれないが、おそらくのレイアウトをカスタマイズすることが困難または不可能になりますTreeViewItemのようなさまざまなレベルには、特定のノードのレイアウトを記述するための追加情報はありません。

私は最近、TreeViewコントロールテンプレートを変更していくつかの実験を行いましたが、わかりませんでした。幸運にも、私が間違っていたことがわかりました。question here on Stack Overflowでは、TreeView子アイテムの向きを垂直から水平に変更する方法がわかります。

0

私は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> 
関連する問題