2

同社は伝統的な複雑な組織構造を持っており、実際の数字ではなく文字「n」を使用してレベル数を定義しています。実現しようとしている構造を等幅フォントで表現してみます。

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

ご覧のとおり、Jack、Kim、および Lucy は Alice に報告しますが、自分自身の報告はありません。

aTreeViewItemsPanel含むStackPaneland と一緒に a を使用するのOrientation="Horizontal"簡単ですが、一部の人が 20 人の他の人に報告するようになると、非常に大きな結果になる可能性がありTreeViewます。を使用 して、 aに の子がTriggersあるかどうかを確認することもできますが、これは前述の と同じコンテキストではありません。例: Fred がレポートを持っていることはわかりますが、Fred が独自のレポートを持っているかどうかはわかりません。TreeViewItemProperty="TreeViewItem.HasItems"ItemsPanel

TreeViewItemsでは、独自の子がない場合、条件付きで垂直にフォーマットできますか?

4

2 に答える 2

2

Josh Smith には、TreeView に関する優れた CodeProject の記事があります。ここで読む

于 2008-09-16T07:00:48.450 に答える
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

次に、TreeView 用に作成したスタイルで消費されます。

    <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>
于 2008-09-22T04:04:00.560 に答える