WPF 六大容器控件完整对比
文档总览
覆盖:ItemsControl / ListBox / ListView / DataGrid / TreeView / TabControl
包含:核心特性、完整示例代码、适用场景、优缺点、关键区别对比,可直接复制导出 Word/Markdown。
一、基础继承关系(底层本质区别)
FrameworkElement └── Control ├── ItemsControl(所有列表基类,无选中、无表头、无滚动默认不自带) │ ├── Selector(具备选中项功能) │ │ ├── ListBox(单列条目、单选/多选) │ │ ├── ListView(可多列,搭配GridView实现表格视图) │ │ ├── TreeView(层级树形结构) │ ├── TabControl(标签页容器,独立分支) └── DataGrid(独立高级表格控件,不继承Selector,完整表格能力)核心分层一句话总结
- ItemsControl:纯重复渲染容器,无选中、无表头、最简列表基类
- ListBox:ItemsControl + 选中逻辑,纯单行条目列表
- ListView:ListBox 扩展,支持多列视图(GridView),轻量表格
- DataGrid:专业数据表格,内置编辑、排序、筛选、行头、单元格绑定
- TreeView:层级递归容器,父子节点树形展示
- TabControl:分页标签容器,切换不同页面内容,非数据列表
二、逐个详解:用法、示例、使用场景、优缺点
1. ItemsControl
核心特性
- 最底层重复项容器,无选中项 SelectedItem
- 无滚动条(需外层套 ScrollViewer)
- 无内置表头、无分组UI、无多选单选
- 只负责按 ItemsSource 重复渲染 ItemTemplate
- 布局面板可自定义:ItemsPanel(StackPanel/WrapPanel/UniformGrid)
适用场景
- 纯展示、不需要选中的流式布局:标签云、图片画廊、按钮组、卡片列表
- 横向平铺、自动换行布局(WrapPanel)
- 简易静态卡片列表,点击不需要高亮选中态
- 组合自定义复合控件的底层渲染载体
完整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