문제

이 회사는 실제 숫자가 아닌 문자 'n'을 사용하여 레벨 수를 정의하는 전통적인 복잡한 조직 구조를 가지고 있습니다.나는 고정 폭 글꼴로 달성하려는 구조를 표현하려고 노력할 것입니다.

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

보시다시피 Jack, Kim 및 Lucy는 Alice에게 보고하지만 자체 보고는 없으므로 대칭적이지 않습니다.

사용하여 TreeViewItemsPanel 다음을 포함하는 StackPanel 그리고 Orientation="Horizontal" ~이다 충분히 쉬움, 하지만 이로 인해 매우 큰 결과가 발생할 수 있습니다. TreeView 어떤 사람들이 그들에게 보고하는 다른 20명을 갖게 되면!당신은 할 수 있습니다 또한 사용 Triggers 여부를 엿보기 위해 TreeViewItem 자녀가 있다 Property="TreeViewItem.HasItems", 그러나 이는 앞서 언급한 것과 같은 맥락이 아니다. ItemsPanel. 예:나는 Fred가 보고서를 가지고 있다는 것을 알 수 있지만 그들이 자신의 보고서를 가지고 있는지 여부는 알 수 없습니다.

그럼 조건부 서식을 적용할 수 있나요? TreeViewItems 자신의 자녀가 없으면 수직적이어야합니까?

도움이 되었습니까?

해결책 2

나는 링크된 기사의 팁을 사용하게 되었는데, 이미 읽어 보았지만 도움이 될 것이라고 생각하지 않았습니다.

그 핵심은 변환기에서 발생합니다.

<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>

다른 팁

Josh Smith는 TreeView에 대한 훌륭한 CodeProject 기사를 가지고 있습니다.읽어 여기

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top