سؤال

وكانت الشركة قد التقليدية المعقدة الهيكل التنظيمي وتحديد كمية من المستويات باستخدام حرف 'n' بدلا من العدد الفعلي.سأحاول أن أعرب عن هيكل أحاول تحقيق في أحادية متباعدة الخط:

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

كما ترون انها ليست متناظرة, جاك, كيم لوسي التقرير إلى أليس لديك أي تقارير خاصة بهم.

باستخدام TreeView مع ItemsPanel تحتوي على StackPanel و Orientation="Horizontal" هو من السهل بما فيه الكفاية, ولكن هذا يمكن أن يؤدي كبيرة جدا TreeView مرة واحدة بعض الناس لديهم 20 آخرين الإبلاغ لهم!يمكنك أيضا استخدام Triggers أن نظرة خاطفة إلى ما إذا كان TreeViewItem وقد الأطفال مع Property="TreeViewItem.HasItems", لكن هذا ليس في السياق نفسه قبل الذكر ItemsPanel. على سبيل المثال:أستطيع أن أقول أن فريد قد التقارير ، ولكن ليس ما إذا كان لديهم التقارير الخاصة بهم.

لذا يمكنك تنسيق مشروط TreeViewItems أن تكون عمودية إذا كان لديهم أطفال خاصة بهم ؟

هل كانت مفيدة؟

المحلول 2

لم ينتهي باستخدام نصائح من ربط المادة التي كنت بالفعل من خلال قراءة ولكن لا أعتقد أن تساعد لي.

لحوم يحدث هنا في converter:

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

نصائح أخرى

جوش سميث لديه excecllent CodeProject المادة عن TreeView.قراءتها هنا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top