【问题标题】:Treeview vs nested Expanders树视图与嵌套扩展器
【发布时间】:2011-09-28 10:04:21
【问题描述】:

编辑 2:

这就是我只想用 1 个树视图做的事情:

my treeview with outlook style 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>

这是用于映射的对象背后的代码: 我得到了一个 list (of 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 个具有不同扩展器样式的树视图是可能的。我需要这个,因为我只想选择单项。

【问题讨论】:

  • 请改写您的问题。我不太清楚你在问什么......谢谢。
  • 我理解他的问题。他在数据模板中使用嵌套的 TreeView 控件,因此可以选择多个项目。我建议更改 TreeViewItem 的 ControlTemplate 而不是 DataTemplate 并在那里使用扩展器。
  • 感谢您的回复 vorrtex。所以你建议我在不使用数据模板、扩展器和列表视图的情况下使用嵌套树视图。就像我从头开始重写树视图控件一样! .您是说在嵌套树视图的情况下,一次只能选择 1 个项目?
  • @Avlin 我试图说 TreeView 控件已经包含扩展器(每个项目左侧的三角形 ToggleButton),并且没有必要向数据模板添加额外的扩展器。但是,如果您发布控件的屏幕截图,我会更清楚。另一种方法:处理选择事件以及当一个控件接收到选择时 - 代码清除所有其他控件中的选择。但这更困难。无论如何添加控件的屏幕截图,我会尝试正确实现它。

标签: wpf xaml mvvm treeview expander


【解决方案1】:

通过使用项目容器样式选择器,您可以拥有 1 个具有不同扩展器样式的树视图: http://msdn.microsoft.com/fr-fr/library/system.windows.hierarchicaldatatemplate.itemcontainerstyleselector%28v=vs.90%29.aspx

编辑:这个解决方案有效,我现在有一个完美的 TreeView

【讨论】:

猜你喜欢
  • 2013-06-09
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
相关资源
最近更新 更多