条目控件(Items Controls)
WPF 条目控件 = 继承自 ItemsControl 的一类控件,专门用来显示一组数据 / 一组子项。
它们统一遵循:
它们统一遵循:
ItemsSource:绑定数据源(集合)ItemTemplate:定义每一项长什么样ItemsPanel:定义项怎么排列ItemContainerStyle:定义项的容器样式
下面按最常用 → 功能更强的顺序,逐个精讲并给可直接复制运行的示例。
一、ItemsControl(最基础、最轻量的条目控件)
特点
- 纯展示列表,没有选中、没有高亮、没有交互
- 性能最轻,适合静态展示卡片、流布局、图标墙等
- 完全由你控制样式和布局
示例:流布局卡片墙
1 <ItemsControl Width="400" Height="300"> 2 <!-- 1. 数据源(静态写死) --> 3 <ItemsControl.Items> 4 <sys:String>卡片1</sys:String> 5 <sys:String>卡片2</sys:String> 6 <sys:String>卡片3</sys:String> 7 <sys:String>卡片4</sys:String> 8 </ItemsControl.Items> 9 10 <!-- 2. 每一项的外观 --> 11 <ItemsControl.ItemTemplate> 12 <DataTemplate> 13 <Border Width="80" Height="80" Background="LightBlue" CornerRadius="5" Margin="5"> 14 <TextBlock Text="{Binding}" VerticalAlignment="Center" HorizontalAlignment="Center"/> 15 </Border> 16 </DataTemplate> 17 </ItemsControl.ItemTemplate> 18 19 <!-- 3. 布局方式:横向换行 --> 20 <ItemsControl.ItemsPanel> 21 <ItemsPanelTemplate> 22 <WrapPanel/> 23 </ItemsPanelTemplate> 24 </ItemsControl.ItemsPanel> 25 </ItemsControl>
适用场景
- 商品卡片墙
- 标签云
- 纯展示类列表(不需要选中)
二、ListBox(最常用可选择列表)
特点
- 支持单选 / 多选
- 自带选中高亮、焦点、键盘导航
- 自带滚动、默认虚拟化(大数据不卡)
示例:绑定对象列表 + 选中样式
1 <ListBox Width="300" Height="200" 2 SelectionMode="Extended" <!-- 多选:Ctrl/Shift --> 3 SelectedItem="{Binding SelectedPerson}"> 4 5 <!-- 每一项模板 --> 6 <ListBox.ItemTemplate> 7 <DataTemplate> 8 <StackPanel Orientation="Horizontal" Margin="2"> 9 <Ellipse Width="10" Height="10" Fill="Green" Margin="0 0 5 0"/> 10 <TextBlock Text="{Binding Name}"/> 11 <TextBlock Text=", 年龄:" Margin="5 0"/> 12 <TextBlock Text="{Binding Age}"/> 13 </StackPanel> 14 </DataTemplate> 15 </ListBox.ItemTemplate> 16 17 <!-- 自定义选中样式(蓝色背景) --> 18 <ListBox.ItemContainerStyle> 19 <Style TargetType="ListBoxItem"> 20 <Style.Triggers> 21 <Trigger Property="IsSelected" Value="True"> 22 <Setter Property="Background" Value="#0078D7"/> 23 <Setter Property="Foreground" Value="White"/> 24 </Trigger> 25 </Style.Triggers> 26 </Style> 27 </ListBox.ItemContainerStyle> 28 </ListBox>
后台绑定(可选)
1 public class Person 2 { 3 public string Name { get; set; } 4 public int Age { get; set; } 5 } 6 7 // 集合 8 public ObservableCollection<Person> Persons { get; set; } 9 = new ObservableCollection<Person> 10 { 11 new Person{Name="张三", Age=22}, 12 new Person{Name="李四", Age=25} 13 };
适用场景
- 菜单列表
- 数据选择列表
- 带多选的表格 / 列表
三、ComboBox(下拉选择框)
特点
- 折叠式选择,节省空间
- 单选为主
- 内部就是一个 ListBox + 文本框
示例:下拉选择性别 / 城市
1 <ComboBox Width="150" Height="30" 2 SelectedIndex="0" 3 SelectedValuePath="Content"> 4 5 <ComboBoxItem>男</ComboBoxItem> 6 <ComboBoxItem>女</ComboBoxItem> 7 <ComboBoxItem>保密</ComboBoxItem> 8 </ComboBox>
绑定集合版本
1 <ComboBox Width="200" 2 ItemsSource="{Binding CityList}" 3 DisplayMemberPath="CityName" <!-- 显示哪个属性 --> 4 SelectedValuePath="CityId"/> <!-- 选中返回什么值 -->
适用场景
- 表单下拉选择(性别、部门、状态)
- 有限选项的快速选择
四、ListView(带视图 / 列的高级列表)
特点
- 基于 ListBox 增强
- 内置 GridView(多列表格)
- 支持排序、分组、网格线
- 企业管理系统最常用
示例:多列表格(最经典用法)
1 <ListView Width="400" Height="200" ItemsSource="{Binding UserList}"> 2 <ListView.View> 3 <GridView> 4 <GridViewColumn Header="编号" DisplayMemberBinding="{Binding Id}" Width="60"/> 5 <GridViewColumn Header="姓名" DisplayMemberBinding="{Binding Name}" Width="100"/> 6 <GridViewColumn Header="年龄" DisplayMemberBinding="{Binding Age}" Width="60"/> 7 <GridViewColumn Header="部门" DisplayMemberBinding="{Binding Dept}" Width="120"/> 8 </GridView> 9 </ListView.View> 10 </ListView>
适用场景
- 后台管理系统数据列表
- 用户列表、订单列表、日志列表
- 需要多列展示的结构化数据
五、TabControl(标签页控件)
特点
- 每一项是一个 TabItem
- 每个 TabItem 自带 Header + Content
- 典型的条目控件 + 头部内容模型混合结构
示例:多标签页
1 <TabControl Width="400" Height="250"> 2 <TabItem Header="首页"> 3 <TextBlock Text="这是首页内容" Margin="10"/> 4 </TabItem> 5 6 <TabItem Header="设置"> 7 <StackPanel Margin="10"> 8 <CheckBox Content="开机启动"/> 9 <CheckBox Content="自动更新"/> 10 </StackPanel> 11 </TabItem> 12 13 <TabItem Header="关于"> 14 <TextBlock Text="版本 1.0.0" Margin="10"/> 15 </TabItem> 16 </TabControl>
适用场景
- 多页面切换
- 配置界面
- 模块化内容切换
六、Menu / ContextMenu(菜单)
特点
- 层级条目控件
- 支持多级子菜单
- 支持命令、图标、快捷键
示例:顶部菜单
1 Menu Width="200" HorizontalAlignment="Left"> 2 <MenuItem Header="文件"> 3 <MenuItem Header="新建" InputGestureText="Ctrl+N"/> 4 <MenuItem Header="打开"/> 5 <Separator/> 6 <MenuItem Header="退出"/> 7 </MenuItem> 8 9 <MenuItem Header="编辑"> 10 <MenuItem Header="复制"/> 11 <MenuItem Header="粘贴"/> 12 </MenuItem> 13 </Menu>
右键菜单
1 <Button Content="右键我"> 2 <Button.ContextMenu> 3 <ContextMenu> 4 <MenuItem Header="重命名"/> 5 <MenuItem Header="删除"/> 6 </ContextMenu> 7 </Button.ContextMenu> 8 </Button>
七、TreeView(树形结构条目控件)
特点
- 层级展示(树形)
- 每一项是 TreeViewItem
- 支持递归绑定(HierarchicalDataTemplate)
简单示例
1 <TreeView Width="200" Height="200"> 2 <TreeViewItem Header="我的电脑" IsExpanded="True"> 3 <TreeViewItem Header="本地磁盘 C:"/> 4 <TreeViewItem Header="本地磁盘 D:"/> 5 </TreeViewItem> 6 7 <TreeViewItem Header="网络"/> 8 </TreeView>
适用场景
- 目录树
- 组织架构
- 层级菜单
条目控件核心通用知识点(必背)
1. 它们都有的关键属性
ItemsSource="{Binding 集合}"→ MVVM 标准绑定方式ItemTemplate→ 每一项长什么样ItemsPanel→ 项怎么排列(StackPanel/WrapPanel/UniformGrid)ItemContainerStyle→ 项容器的样式(ListBoxItem 等)
2. 性能关键点:虚拟化
ListBox / ListView 默认开启 UI 虚拟化,只渲染屏幕可见项,几万条不卡顿。
开启方式:
开启方式:
1 <ListBox VirtualizingStackPanel.IsVirtualizing="True" 2 VirtualizingStackPanel.VirtualizationMode="Recycling"/>
3. 选择类控件通用属性
SelectedItem:选中的对象SelectedIndex:选中索引SelectedValue:按路径取值SelectionMode:Single / Multiple / Extended
快速选择指南
- 只展示,不要选中 → ItemsControl
- 单选 / 多选列表 → ListBox
- 下拉选择 → ComboBox
- 多列表格 → ListView
- 多标签页 → TabControl
- 菜单 / 右键 → Menu / ContextMenu
- 树形结构 → TreeView
浙公网安备 33010602011771号