ItemsControl 是什么?(AI生成)
ItemsControl 是 WPF 中用于显示集合数据的核心基类。它提供了渲染列表项的基础功能,但不包含高级特性(如选择、排序、过滤)。需要自定义列表布局时常用它。
核心特性
-
ItemsSource
绑定数据集合(如ObservableCollection<T>, 数组,List<T>):<ItemsControl ItemsSource="{Binding 我的集合}" /> -
ItemTemplate
通过DataTemplate自定义每个项的显示样式:<ItemsControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding 名称}" /> </DataTemplate> </ItemsControl.ItemTemplate> -
ItemsPanel
自定义布局容器(默认是垂直StackPanel):<ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel /> <!-- 改为流式布局 --> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> -
ItemContainerStyle
为包裹每个项的容器(如ContentPresenter)设置样式:<ItemsControl.ItemContainerStyle> <Style TargetType="ContentPresenter"> <Setter Property="Margin" Value="5" /> <!-- 添加间距 --> </Style> </ItemsControl.ItemContainerStyle>
它的派生控件(更强大)
-
ListBox(支持选择) -
ComboBox(下拉列表) -
ListView(支持列视图/分组) -
TreeView(树形结构) -
Menu/StatusBar(专用菜单/状态栏)
何时使用 ItemsControl?
-
需要简单列表 ✅
-
不需要选择功能 ❌
-
需完全自定义布局(如用
Canvas自由定位) -
构建自定义列表控件
基础示例
<ItemsControl ItemsSource="{Binding 员工列表}">
<!-- 定义单个项的模板 -->
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding 姓名}" FontWeight="Bold" />
<TextBlock Text="{Binding 职位}" Margin="10,0,0,0" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
<!-- 修改布局为垂直栈 -->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
主要限制
-
❌ 不支持项选择(点击无高亮/事件)
-
❌ 无内置排序/过滤(需用
CollectionViewSource) -
❌ 默认不启用虚拟化(大数据集性能差)
重要技巧
-
启用虚拟化 (大数据集必用):
<ItemsControl.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel /> <!-- 大幅提升性能 --> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> -
使用
ObservableCollection<T>
集合变化时自动更新 UI(添加/删除项)。 -
未提供模板时
默认调用项的ToString()显示文本。 -
容器事件处理
通过ItemContainerGenerator处理项加载等事件。
高级用法
-
分组:结合
GroupStyle+CollectionViewSource -
拖拽:在
ItemContainerStyle中实现事件 -
自定义容器:继承
ItemsControl并重写GetContainerForItemOverride()
总结:ItemsControl 适用场景
| 需求 | 是否推荐 |
|---|---|
| 简单只读列表 | ✅ 首选 |
| 需要选择/交互 | ❌ 用 ListBox |
| 复杂布局(如网格) | ✅ 配合自定义 Panel |
| 大数据集 | ✅ (需开虚拟化) |

浙公网安备 33010602011771号