Treeview против вложенных расширителей

Редактировать 2:

Это то, что я хочу сделать только с одним деревом:

http://img204.imageshack.us/img204/8218/sansreju.jpg

Изменить:

Я хочу знать, как сделать древовидное представление с различными стилями расширения с точки зрения уровня. В настоящее время я использую вложенные расширители.

Исходный вопрос:

Я пытаюсь получить WPF Treeview, который имеет разные стили расширителей с точки зрения уровня.

То, что у меня есть на самом деле, это:

список, который содержит разные шаблоны в зависимости от типа объекта с помощью селектора

<ListView Name="MyTreeView" ItemTemplateSelector="{StaticResource Selector}">

<!-- Items Template -->
<HierarchicalDataTemplate x:Key="ItemsTemplate" ItemsSource="{Binding Childrens}">
    <TextBlock Text="{Binding Name}" Margin="5,0" VerticalAlignment="Center"/>
</HierarchicalDataTemplate>

<!-- SubNode Template -->
<DataTemplate x:Key="SubNodeTemplate">
    <Expander Style="{StaticResource SubExpander}">
        <TreeView ItemsSource="{Binding Childrens}"
                  ItemTemplateSelector="{StaticResource Selector}"/>
    </Expander>
</DataTemplate>

<!-- Node Template -->
<DataTemplate x:Key="NodeTemplate">
    <Expander Style="{StaticResource MainViewExpander}">
        <ListView ItemsSource="{Binding Childrens}"
                  ItemTemplateSelector="{StaticResource Selector}"/>
    </Expander>
</DataTemplate>

И это код позади объекта, используемого для сопоставления: я получил список (из IUpSlideItem) и применил его к MyTreeview.ItemsSource

Public Interface IUpSlideItem
    Property Childrens As List(Of IUpSlideItem)
    Property Name As String
End Interface

Public Class Item
    Implements IUpSlideItem

    Public Property Childrens As System.Collections.Generic.List(Of IUpSlideItem) Implements IUpSlideItem.Childrens
    Public Property Name As String Implements IUpSlideItem.Name

End Class

Public Class Node
    Implements IUpSlideItem

    Public Property Childrens As System.Collections.Generic.List(Of IUpSlideItem) Implements IUpSlideItem.Childrens
    Public Property Name As String Implements IUpSlideItem.Name

End Class

Теперь вопрос состоит в том, чтобы узнать, возможно ли только 1 древовидное представление с другим стилем расширения с точки зрения элемента типа. Мне это нужно, потому что я хочу выбрать только один элемент.


person Avlin    schedule 28.09.2011    source источник
comment
Пожалуйста, перефразируйте свой вопрос. Мне не совсем понятно, о чем вы спрашиваете... Спасибо.   -  person Sergei B.    schedule 28.09.2011
comment
Я понял его вопрос. Он использует вложенные элементы управления TreeView внутри шаблонов данных, поэтому можно выбрать несколько элементов. Я бы рекомендовал изменить ControlTemplate TreeViewItem вместо DataTemplate и использовать там расширители.   -  person vortexwolf    schedule 28.09.2011
comment
спасибо за ответ vorrtex. Итак, вы предлагаете мне иметь вложенное древовидное представление без использования шаблона данных, расширителя и списка. Это было похоже на то, что я переписал управление древовидной структурой с нуля! . Вы говорите, что в случае вложенного дерева сразу будет выбран только 1 элемент?   -  person Avlin    schedule 28.09.2011
comment
@Avlin Я пытался сказать, что элемент управления TreeView уже содержит расширители (треугольная кнопка ToggleButton слева от каждого элемента), и нет необходимости добавлять дополнительные расширители в шаблоны данных. Но мне было бы лучше, если бы вы выложили скриншот своего элемента управления. Другой подход: обрабатывать события выбора, и когда один элемент управления получает выбор, код очищает выбор во всех других элементах управления. Но это сложнее. В любом случае добавьте скриншот управления, и я постараюсь реализовать его правильно.   -  person vortexwolf    schedule 28.09.2011


Ответы (1)


с помощью селектора стиля контейнера элементов вы можете иметь 1 древовидное представление с другим стилем расширения: http://msdn.microsoft.com/fr-fr/library/system.windows.hierarchicaldatatemplate.itemcontainerstyleselector%28v=vs.90%29.aspx

изменить: это решение работает, теперь у меня есть идеальный TreeView

person Avlin    schedule 29.09.2011
comment
+1 Вот английская версия, если кому интересно: msdn.microsoft.com/en-US/library/ - person Josh Stribling; 17.11.2012