任何人都知道我可以像WPF中的多列树状视图一样获得控件吗?WPF中的多列树状视图
回答
我已经根据旧博客文章here实施了此操作。但是如果我没有记错的话,我必须做一些手动工作才能让事情顺利进行。具体与滚动条。
但是,这应该给你一个良好的开端。
在CodeProject上的一篇文章,可能会帮助:
http://www.codeproject.com/KB/WPF/TreeListView.aspx
有不少其他有用articles有关于WPF的TreeView。
SharpDevelop有ListView
子类叫做SharpTreeView
它可以做你正在寻找的东西。
你可以看到这个控制的SharpDevelop的 “观察” 窗口的一个活生生的例子:在监视窗口中使用
XAML(在5.1.0测试版):
<tv:SharpGridView x:Key="variableGridView" AllowsColumnReorder="False">
<GridView.Columns>
<GridViewColumn Header="{core:Localize MainWindow.Windows.Debug.LocalVariables.NameColumn}" Width="200">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<tv:SharpTreeNodeView />
<local:AutoCompleteTextBox x:Name="name" Margin="-6 0 0 0" MinWidth="100" Text="{Binding Node.Name}" IsEditable="{Binding Node.CanSetName}">
<local:AutoCompleteTextBox.ContextMenu>
<MultiBinding Converter="{StaticResource menuBuilder}">
<Binding Path="Node.ContextMenuAddInTreeEntry" />
<Binding Path="Node" />
</MultiBinding>
</local:AutoCompleteTextBox.ContextMenu>
</local:AutoCompleteTextBox>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="{core:Localize MainWindow.Windows.Debug.LocalVariables.ValueColumn}" Width="200">
<GridViewColumn.CellTemplate>
<DataTemplate>
<local:AutoCompleteTextBox
MinWidth="100"
Text="{Binding Node.Value}"
IsEditable="{Binding Node.CanSetValue}">
<local:AutoCompleteTextBox.ContextMenu>
<MultiBinding Converter="{StaticResource menuBuilder}">
<Binding Path="Node.ContextMenuAddInTreeEntry" />
<Binding Path="Node" />
</MultiBinding>
</local:AutoCompleteTextBox.ContextMenu>
</local:AutoCompleteTextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="{core:Localize MainWindow.Windows.Debug.LocalVariables.TypeColumn}" Width="200">
<GridViewColumn.CellTemplate>
<DataTemplate>
<local:AutoCompleteTextBox MinWidth="100" Text="{Binding Node.Type}" IsEditable="False">
<local:AutoCompleteTextBox.ContextMenu>
<MultiBinding Converter="{StaticResource menuBuilder}">
<Binding Path="Node.ContextMenuAddInTreeEntry" />
<Binding Path="Node" />
</MultiBinding>
</local:AutoCompleteTextBox.ContextMenu>
</local:AutoCompleteTextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView.Columns>
</tv:SharpGridView>
资源被设置为SharpTreeView控件的View属性。
不错的截图,但它应该如何使用?你的代码示例似乎显示了'tv:SharpTreeView.View`的定义,但其父母'tv:SharpTreeView`的其余部分缺失。对于那些可以使用WPF的标准`TreeView`的人来说,它是如何工作的? – ygoe 2016-08-11 19:10:55
如果你不需要列标题,这很容易。您只需提供物品容器模板,在右侧添加固定宽度的网格列,然后将其绑定到物品的相关数据。
一个TreeView控件的默认项容器有定义为(增加了一些评论)的网格:
<Grid>
<Grid.ColumnDefinitions>
<!--Expander--><ColumnDefinition MinWidth="19" Width="Auto"/>
<!--Item--><ColumnDefinition Width="Auto"/>
<!--Overflow--><ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<!--Current Item--><RowDefinition Height="Auto"/>
<!--Sub-items--><RowDefinition/>
</Grid.RowDefinitions>
<ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ExpandCollapseToggleStyle}"/>
<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="1" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
<ContentPresenter x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
<ItemsPresenter x:Name="ItemsHost" Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="1"/>
</Grid>
所以才扩大这种网格包含可预见的宽度列在右边,你将有列。
- 添加列定义为新列,使其自动调整大小
- 更新“ItemsHost”的列跨度跨越添加的列
- 可预见的宽度控制添加到该列:
部分:
<Grid>
...
<ColumnDefinition Width="Auto"/>
...
<ItemsPresenter ... Grid.ColumnSpan="3" ... />
...
<Border Grid.Column="3"><!--Add column data here--></Border>
...
</Grid>
如果添加的边框是所有行相同的宽度,你将有一个查看感觉像一个列与树视图。这显然不能很好地扩展,但如果只需要一个快速和肮脏的解决方案,您应该可以在几分钟内完成此操作,而无需添加外部控件/库的依赖关系。
我们的需求迅速增长,我们在问题使用添加外树列标签网格和数据绑定列的宽度有这些“列”的宽度[生成树控制的实际宽度列自动大小的列]。这是有效的,这就是我所说的辩护。
如果您不介意(或需要)跨所有列延伸的选择框(“Bd”边框),则也可以在生成的项目模板而不是项目容器中完成此方法。
- 1. WPF树视图
- 2. 与多种类型的WPF树视图
- 3. 多个片段的树状视图
- 4. WPF树型视图
- 5. WPF在树状视图中操纵选定的项目
- 6. 更改WPF中树状视图的选定项目
- 7. 支持拖动WPF中多个项目的多选树视图
- 8. 在WPF树状视图中显示来自sharepoint的列表和文件夹
- 9. 从WPF树状视图中获取选定文本
- 10. 默认在树状视图中选择topnode wpf MVVM
- 11. 水平树(视图)中的Winforms或WPF
- 12. WPF树视图中选择的项目
- 13. Wpf树视图搜索
- 14. WPF - 创建树视图
- 15. WPF树视图事件
- 16. WPF:拉伸树视图
- 17. 树状视图中的Win32文本框
- 18. 从wpf中的文件路径列表填充树视图
- 19. 在WPF中绑定到树视图
- 20. 无法施展树型视图为树型视图在WPF
- 21. 在树状视图中显示html odoo
- 22. 在树状视图中双击事件
- 23. 在vb.net中使用树状视图
- 24. 如何开发多列树视图asp.net
- 25. WPF - 在树形视图中筛选/搜索多个集合视图
- 26. 我需要这样的Wpf树视图
- 27. WPF:用树视图的数据绑定
- 28. 关于WPF树视图的问题
- 29. 在树状视图中嵌套节点的wpf访问堆栈面板
- 30. Android的树视图列表
我已经使用这个解决方案,它运作良好。 – Dylan 2009-01-21 15:40:41