WPF 六大集合容器控件完整对比

WPF 六大容器控件完整对比

文档总览

覆盖:ItemsControl / ListBox / ListView / DataGrid / TreeView / TabControl
包含:核心特性、完整示例代码、适用场景、优缺点、关键区别对比,可直接复制导出 Word/Markdown。

一、基础继承关系(底层本质区别)

FrameworkElement └── Control ├── ItemsControl(所有列表基类,无选中、无表头、无滚动默认不自带) │ ├── Selector(具备选中项功能) │ │ ├── ListBox(单列条目、单选/多选) │ │ ├── ListView(可多列,搭配GridView实现表格视图) │ │ ├── TreeView(层级树形结构) │ ├── TabControl(标签页容器,独立分支) └── DataGrid(独立高级表格控件,不继承Selector,完整表格能力)

核心分层一句话总结

  1. ItemsControl:纯重复渲染容器,无选中、无表头、最简列表基类
  2. ListBox:ItemsControl + 选中逻辑,纯单行条目列表
  3. ListView:ListBox 扩展,支持多列视图(GridView),轻量表格
  4. DataGrid:专业数据表格,内置编辑、排序、筛选、行头、单元格绑定
  5. TreeView:层级递归容器,父子节点树形展示
  6. TabControl:分页标签容器,切换不同页面内容,非数据列表

二、逐个详解:用法、示例、使用场景、优缺点

1. ItemsControl

核心特性

  • 最底层重复项容器,无选中项 SelectedItem
  • 无滚动条(需外层套 ScrollViewer)
  • 无内置表头、无分组UI、无多选单选
  • 只负责按 ItemsSource 重复渲染 ItemTemplate
  • 布局面板可自定义:ItemsPanel(StackPanel/WrapPanel/UniformGrid)

适用场景

  1. 纯展示、不需要选中的流式布局:标签云、图片画廊、按钮组、卡片列表
  2. 横向平铺、自动换行布局(WrapPanel)
  3. 简易静态卡片列表,点击不需要高亮选中态
  4. 组合自定义复合控件的底层渲染载体

完整XAML示例

<ScrollViewer> <ItemsControl ItemsSource="{Binding CardList}"> <!-- 布局:横向自动换行 --> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel Orientation="Horizontal" ItemWidth="180"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <!-- 单项模板 --> <ItemsControl.ItemTemplate> <DataTemplate> <Border Background="#eee" Margin="5" Padding="8"> <StackPanel> <TextBlock Text="{Binding Title}" FontSize="14"/> <TextBlock Text="{Binding Desc}" Foreground="Gray"/> </StackPanel> </Border> </DataTemplate> </ItemsControl.It