2008-09-16 8 views
2

会社には伝統的な複雑な組織構造があり、実際の数値ではなく文字 'n'を使用してレベルの量を定義します。私が試してみて、表現し、私はモノ間隔のフォントで達成しようとしている構造になります。あなたはそれが左右対称ではありません見ることができるようにWPF:組織図ツリービュー条件付き書式

  Alice 
,--------|-------,------,------, 
Bob  Fred Jack Kim Lucy 
|  |  
Charlie Greg  
Darren Henry 
Eric 

を、アリスにジャック、キムとルーシーレポートとしてではなく、独自の報告がありません。 StackPanelOrientation="Horizontal"を含むItemsPanelTreeViewを使用して

easy enoughですが、一部の人々は彼らに報告20人を持っていたら、これは非常に大きなTreeViewにつながることができます! also useTriggersTreeViewItemに子どもがProperty="TreeViewItem.HasItems"であるかどうかを調べることができますが、これは前述のItemsPanelと同じ文脈ではありません。 例:私はフレッドが報告しているとは言えますが、自分の報告があるかどうかはわかりません。

TreeViewItemsは、子どもがいない場合、縦型になるように条件付きでフォーマットできますか?

答えて

0

私はすでに読んでいたが、私を助けてくれるとは思わなかったリンクされた記事のヒントを使ってしまった。

それの肉は、コンバータでは、ここに起こる:

今度は私がツリービューのために作成したスタイルで消費されます
<ValueConversion(GetType(ItemsPresenter), GetType(Orientation))> _ 
Public Class ItemsPanelOrientationConverter 
Implements IValueConverter 

Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, _ 
ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) _ 
As Object Implements System.Windows.Data.IValueConverter.Convert 

    'The 'value' argument should reference an ItemsPresenter.' 
    Dim itemsPresenter As ItemsPresenter = TryCast(value, ItemsPresenter) 
    If itemsPresenter Is Nothing Then 
     Return Binding.DoNothing 
    End If 

    'The ItemsPresenter''s templated parent should be a TreeViewItem.' 
    Dim item As TreeViewItem = TryCast(itemsPresenter.TemplatedParent, TreeViewItem) 
    If item Is Nothing Then 
     Return Binding.DoNothing 
    End If 

    For Each i As Object In item.Items 
     Dim element As StaffMember = TryCast(i, StaffMember) 
     If element.IsManager Then 
      'If this element has children, then return Horizontal' 
      Return Orientation.Horizontal 
     End If 
    Next 

    'Must be a stub ItemPresenter' 
    Return Orientation.Vertical 

End Function 

<Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate > 
       <ItemsPanelTemplate.Resources> 
        <local:ItemsPanelOrientationConverter x:Key="conv" /> 
       </ItemsPanelTemplate.Resources> 
       <StackPanel IsItemsHost="True" 
          Orientation="{Binding 
          RelativeSource={x:Static RelativeSource.TemplatedParent}, 
          Converter={StaticResource conv}}" /> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
2

Josh Smithには、TreeViewに関するExcecllent CodeProjectの記事があります。読んでくださいhere