WPF DataGrid 全属性详解(分类整理+实用说明)
前言
在 WPF 开发中,DataGrid 是展示和编辑表格数据的核心控件,其属性覆盖布局、数据绑定、交互、样式等多个维度。很多开发者在使用时容易混淆各类属性的作用,尤其是新手常因属性配置不当导致功能异常。
本文将 DataGrid 所有核心属性按功能分类整理,包含继承属性和专属属性,附详细说明和使用场景,助力开发者快速上手、精准配置。本文基于 .NET Framework 4.5+ / .NET Core 3.0+ / .NET 5+ 标准版本,所有属性均来自 System.Windows.Controls 命名空间下的 DataGrid 控件。
一、核心基础属性(继承自 FrameworkElement/Control)
这类属性是 WPF 控件的通用属性,DataGrid 直接继承,主要用于控制控件的基础外观和布局,是所有 WPF 控件的共性配置。
| 属性名 | 类型 | 说明 |
|---|---|---|
| ActualHeight | double | 只读,控件实际渲染高度 |
| ActualWidth | double | 只读,控件实际渲染宽度 |
| Background | Brush | 背景色/背景画刷(如纯色、渐变、图片) |
| BorderBrush | Brush | 边框画刷 |
| BorderThickness | Thickness | 边框厚度(如 BorderThickness="1,2,1,2" 表示四周边框厚度不同) |
| Cursor | Cursor | 鼠标悬停时的光标样式(如 Arrow、Hand、IBeam 等) |
| DataContext | object | 数据上下文,绑定数据源的核心基础 |
| FontFamily | FontFamily | 字体家族(如 "Microsoft YaHei"、"Arial") |
| FontSize | double | 字体大小 |
| FontStretch | FontStretch | 字体拉伸(如 Condensed 压缩、Expanded 扩展) |
| FontStyle | FontStyle | 字体样式(Normal 正常、Italic 斜体) |
| FontWeight | FontWeight | 字体粗细(Normal 正常、Bold 加粗) |
| Foreground | Brush | 前景色(即文字颜色) |
| Height | double | 控件高度(显式设置,不设置则自适应) |
| HorizontalAlignment | HorizontalAlignment | 水平对齐方式(Left 左、Right 右、Center 居中、Stretch 拉伸) |
| HorizontalContentAlignment | HorizontalAlignment | 控件内部内容的水平对齐方式 |
| IsEnabled | bool | 是否启用控件(false 时控件灰显,不响应交互) |
| IsFocused | bool | 只读,是否获取焦点 |
| IsHitTestVisible | bool | 是否响应鼠标/触摸命中测试(false 时无法点击、选中) |
| IsVisible | bool | 只读,是否可见 |
| Margin | Thickness | 外边距,控件与其他控件的间距(如 Margin="5,10" 表示上下10,左右5) |
| MaxHeight | double | 最大高度,控件不能超过此高度 |
| MaxWidth | double | 最大宽度,控件不能超过此宽度 |
| MinHeight | double | 最小高度,控件不能小于此高度 |
| MinWidth | double | 最小宽度,控件不能小于此宽度 |
| Opacity | double | 透明度(0~1,0 完全透明,1 不透明) |
| Padding | Thickness | 内边距,控件边框与内部内容的间距 |
| Tag | object | 自定义附加数据,可存储任意对象(如关联业务数据) |
| VerticalAlignment | VerticalAlignment | 垂直对齐方式(Top 上、Bottom 下、Center 居中、Stretch 拉伸) |
| VerticalContentAlignment | VerticalAlignment | 控件内部内容的垂直对齐方式 |
| Visibility | Visibility | 可见性(Visible 可见、Collapsed 折叠(不占空间)、Hidden 隐藏(占空间)) |
| Width | double | 控件宽度(显式设置,不设置则自适应) |
二、DataGrid 专属核心属性(按功能分类)
这类属性是 DataGrid 独有的,直接决定表格的数据展示、交互逻辑、编辑功能等核心特性,是 DataGrid 配置的重点。
- 数据绑定与数据源相关
核心作用:关联数据源,控制数据的展示和选中状态,是 DataGrid 实现数据展示的基础。
| 属性名 | 类型 | 说明 |
|---|---|---|
| ItemsSource | IEnumerable | 核心数据源,绑定集合(如 List)、DataTable、ObservableCollection 等 |
| DataMember | string | 当 ItemsSource 为 DataSet 时,指定要显示的表名 |
| SelectedItem | object | 选中的行数据对象,支持双向绑定(常用于获取/设置当前选中行) |
| SelectedItems | IList | 只读,多选模式下选中的所有行(需设置 SelectionMode="Extended" 启用多选) |
| SelectedIndex | int | 选中行的索引(-1 表示无选中行) |
| CurrentItem | object | 焦点所在的行数据对象(区别于 SelectedItem:焦点不一定选中) |
| CurrentCell | DataGridCellInfo | 焦点所在的单元格,包含行和列的完整信息 |
| Items | ItemCollection | 只读,控件内所有数据项的集合(直接关联 ItemsSource 的数据) |
| ItemContainerGenerator | ItemContainerGenerator | 生成行容器(DataGridRow)的辅助对象,可用于获取指定索引的行 |
- 列配置相关
核心作用:控制列的生成方式、排列、大小、样式等,决定表格的列展示形态。
| 属性名 | 类型 | 说明 |
|---|---|---|
| Columns | DataGridColumnCollection | 列集合,可手动添加 DataGridTextColumn、DataGridCheckBoxColumn、DataGridComboBoxColumn 等列类型 |
| AutoGenerateColumns | bool | 是否自动生成列(默认 true,绑定数据源时自动根据数据属性创建列;手动配置列时设为 false) |
| CanUserAddColumns | bool | 是否允许用户手动添加列(仅支持自定义场景,默认 false) |
| CanUserDeleteColumns | bool | 是否允许用户手动删除列(仅支持自定义场景,默认 false) |
| CanUserReorderColumns | bool | 是否允许用户拖拽调整列顺序(默认 true) |
| CanUserResizeColumns | bool | 是否允许用户拖拽调整列宽度(默认 true) |
| CanUserSortColumns | bool | 是否允许用户点击列头排序(默认 true,点击列头自动按列数据排序) |
| ColumnHeaderHeight | double | 列头的高度(默认自适应,可显式设置固定值) |
| ColumnHeaderStyle | Style | 列头的样式(目标类型:DataGridColumnHeader,可自定义列头背景、字体、对齐方式等) |
| ColumnHeaderTemplate | DataTemplate | 列头的自定义模板(可添加图标、按钮等复杂控件) |
| ColumnHeaderTemplateSelector | DataTemplateSelector | 列头模板选择器,根据条件动态切换列头模板 |
| ColumnWidth | DataGridLength | 默认列宽度,支持三种模式:Auto(自适应内容)、Pixel(固定像素,如 100)、Star(占比,如 * 表示均分剩余空间) |
| FrozenColumnCount | int | 冻结列数(左侧固定的列,滚动水平滚动条时不跟随移动,常用于序号列、主键列) |
- 行配置相关
核心作用:控制行的样式、高度、详情展示等,决定表格行的展示和交互形态。
| 属性名 | 类型 | 说明 |
|---|---|---|
| RowDetailsTemplate | DataTemplate | 行详情模板,展开行时显示的额外内容(如显示行的详细信息、子表格等) |
| RowDetailsTemplateSelector | DataTemplateSelector | 行详情模板选择器,根据条件动态切换行详情模板 |
| RowDetailsVisibilityMode | DataGridRowDetailsVisibilityMode | 行详情显示模式:Collapsed(默认,折叠)、Visible(全部展开)、VisibleWhenSelected(仅选中行展开) |
| RowHeaderStyle | Style | 行头的样式(目标类型:DataGridRowHeader,行头默认显示行号) |
| RowHeaderTemplate | DataTemplate | 行头的自定义模板 |
| RowHeaderWidth | double | 行头的宽度(默认自适应,可显式设置) |
| RowHeight | double | 行的高度(默认 24,可显式设置固定值,或设为 Auto 自适应内容) |
| AlternatingRowBackground | Brush | 交替行背景色(需设置 AlternationCount ≥2 启用,实现奇偶行不同颜色的效果) |
| AlternationCount | int | 交替行计数(默认 0,设为 2 表示奇偶行交替;设为 3 表示每 3 行交替一次) |
| CanUserResizeRows | bool | 是否允许用户拖拽调整行高度(默认 true) |
| RowStyle | Style | 行的样式(目标类型:DataGridRow,可自定义行的背景、边框、字体等) |
| VirtualizingPanel.IsVirtualizing | bool | 附加属性,是否启用 UI 虚拟化(大数据量时建议启用,提升性能;默认 true) |
| VirtualizingPanel.VirtualizationMode | VirtualizationMode | 附加属性,虚拟化模式:Standard(默认,创建可见行)、Recycling(复用行容器,性能更优) |
- 编辑与交互相关
核心作用:控制表格的编辑权限、编辑触发方式,以及编辑过程中的事件触发。
| 属性名 | 类型 | 说明 |
|---|---|---|
| IsReadOnly | bool | 是否只读(禁止编辑所有单元格,默认 false;需禁止编辑时设为 true) |
| IsTabStop | bool | 是否参与 Tab 键焦点切换(默认 true) |
| CanUserAddRows | bool | 是否显示最后一行空白行(用于新增数据,默认 true;禁止新增时设为 false) |
| CanUserDeleteRows | bool | 是否允许用户删除行(按 Delete 键删除选中行,默认 true;禁止删除时设为 false) |
| EditTriggers | DataGridEditTriggers | 编辑触发方式:Default(默认,点击单元格或按 Enter 键)、Click(仅点击)、Focus(获取焦点)、None(禁止编辑) |
| CellEditTemplate | DataTemplate | 单元格编辑时的模板(如编辑时显示 ComboBox、DatePicker 等控件) |
| CellEditTemplateSelector | DataTemplateSelector | 单元格编辑模板选择器,根据条件动态切换编辑模板 |
| BeginningEdit | 事件 | 开始编辑时触发,可在事件中阻止编辑(如判断权限) |
| CellEditEnding | 事件 | 单元格编辑结束时触发,可在事件中验证数据、取消编辑结果 |
| RowEditEnding | 事件 | 行编辑结束时触发,可用于批量验证行数据 |
- 选择与焦点相关
核心作用:控制表格的选择模式、选择单元,以及焦点的获取和变化。
| 属性名 | 类型 | 说明 |
|---|---|---|
| SelectionMode | DataGridSelectionMode | 选择模式:Single(默认,单选)、Extended(多选,按住 Ctrl/Shift 键选择) |
| SelectionUnit | DataGridSelectionUnit | 选择单元:Cell(仅选中单元格)、Row(默认,选中整行)、CellOrRowHeader(点击单元格选单元格,点击行头选整行) |
| IsSynchronizedWithCurrentItem | bool | 是否与 ItemsControl 的 CurrentItem 同步(默认 true,确保选中项与焦点项一致) |
| FocusVisualStyle | Style | 焦点视觉样式,自定义控件获取焦点时的高亮效果 |
| LostFocus | 事件 | 失去焦点时触发 |
| GotFocus | 事件 | 获取焦点时触发 |
| SelectedCells | IList | 只读,选中的单元格集合(适用于 Cell 选择模式) |
| SelectedCellsChanged | 事件 | 选中单元格变化时触发,可获取新增选中和取消选中的单元格 |
- 排序、筛选、分组相关
核心作用:控制表格的数据排序、筛选和分组功能,提升数据展示的灵活性。
| 属性名 | 类型 | 说明 |
|---|---|---|
| SortDescriptions | SortDescriptionCollection | 排序描述集合,可手动指定排序字段和排序方向(升序/降序),实现默认排序 |
| CanUserSortColumns | bool | 允许用户排序(已在列配置中列出,核心排序开关) |
| IsSorting | bool | 只读,是否正在排序 |
| Sorting | 事件 | 排序时触发,可在事件中自定义排序逻辑(如按自定义规则排序) |
| Filter | Predicate | 筛选委托,需结合 CollectionViewSource 使用,实现数据筛选(如筛选出符合条件的行) |
| GroupStyle | Collection | 分组样式,绑定分组数据源时生效,可自定义分组头的展示形态 |
- 滚动与布局相关
核心作用:控制滚动条的显示和滚动行为,优化表格在大量数据下的展示体验。
| 属性名 | 类型 | 说明 |
|---|---|---|
| HorizontalScrollBarVisibility | ScrollBarVisibility | 水平滚动条可见性:Visible(始终显示)、Hidden(隐藏)、Auto(自动,内容超出时显示)、Disabled(禁用,不滚动) |
| VerticalScrollBarVisibility | ScrollBarVisibility | 垂直滚动条可见性(取值同水平滚动条) |
| ScrollViewer.CanContentScroll | bool | 附加属性,是否启用逻辑滚动(默认 true,虚拟化依赖此属性;设为 false 时为物理滚动) |
| ScrollViewer.HorizontalScrollOffset | double | 水平滚动偏移量,获取或设置当前滚动的水平位置 |
| ScrollViewer.VerticalScrollOffset | double | 垂直滚动偏移量,获取或设置当前滚动的垂直位置 |
| HeadersVisibility | DataGridHeadersVisibility | 头可见性:All(默认,显示列头和行头)、Column(仅显示列头)、Row(仅显示行头)、Nobody(都不显示) |
- 样式与模板相关
核心作用:自定义表格的外观,包括单元格、行、列头的样式,以及整体布局模板。
| 属性名 | 类型 | 说明 |
|---|---|---|
| CellStyle | Style | 单元格样式(目标类型:DataGridCell,可自定义单元格背景、边框、字体、对齐方式等) |
| CellTemplate | DataTemplate | 单元格默认显示模板(非编辑状态,可添加图片、文本格式化等) |
| CellTemplateSelector | DataTemplateSelector | 单元格模板选择器,根据条件动态切换显示模板(如不同数据值显示不同样式) |
| Template | ControlTemplate | 控件整体模板,完全自定义 DataGrid 的布局结构(如修改滚动条位置、添加自定义头部) |
| Validation.ErrorTemplate | ControlTemplate | 数据验证错误提示模板,自定义数据验证失败时的显示效果(如红色边框、错误图标) |
| RowValidationErrorTemplate | ControlTemplate | 行级验证错误模板,自定义行数据验证失败时的显示效果 |
| RowValidationRules | Collection | 行级验证规则集合,添加自定义的行数据验证规则(如必填字段验证、数据格式验证) |
- 其他交互属性
核心作用:控制网格线、触控操作、提示信息等辅助交互特性。
| 属性名 | 类型 | 说明 |
|---|---|---|
| GridLinesVisibility | DataGridGridLinesVisibility | 网格线可见性:None(无网格线)、Horizontal(仅水平网格线)、Vertical(仅垂直网格线)、All(默认,都显示) |
| GridLinesBrush | Brush | 网格线颜色(默认灰色) |
| HorizontalGridLinesBrush | Brush | 水平网格线颜色(覆盖 GridLinesBrush) |
| VerticalGridLinesBrush | Brush | 垂直网格线颜色(覆盖 GridLinesBrush) |
| IsManipulationEnabled | bool | 是否启用触控操作(如平移、缩放,默认 false) |
| ToolTip | object | 鼠标悬停提示文本或控件(如显示当前表格的说明信息) |
三、补充说明(关键注意点)
-
继承链说明:DataGrid 的完整继承链为 Object → DispatcherObject → DependencyObject → Visual → UIElement → FrameworkElement → Control → ItemsControl → DataGrid,本文仅列出核心继承属性,其他次要继承属性可参考官方文档。
-
附加属性使用:部分属性为附加属性(如 VirtualizingPanel.IsVirtualizing),在 XAML 中需用"附加属性所有者.属性名"的格式设置,示例:
四、总结
DataGrid 控件的属性繁多,但按功能分类后逻辑清晰:基础属性控制外观布局,专属属性控制数据绑定、列行配置、交互编辑、排序筛选等核心功能。实际开发中,无需记忆所有属性,可根据需求场景(如数据展示、编辑、大数据优化)查找对应分类的属性进行配置。
如果需要某类属性的具体使用示例(如列自定义配置、虚拟化实现、数据验证),可以在评论区留言,后续会补充对应的实战教程。
✨ 创作不易,点赞+收藏+关注,后续分享更多 WPF 开发干货!
📢 本文同步发布于 CSDN,转载请注明出处。