PropertyGrid是Windows窗体(WinForms)框架中内置的实用控件,它的核心作用是自动解析对象的公开属性,并以可视化的表格形式展示出来,同时支持用户直接在界面上编辑这些属性值,不需要开发者手动编写大量的属性展示和编辑逻辑。

PropertyGrid的基础使用
在WinForms项目中使用PropertyGrid非常简单,只需要将控件拖到窗体上,然后给它的SelectedObject属性赋值,就能自动展示对应对象的属性。下面是一个最基础的示例:
using System;
using System.Windows.Forms;
using System.ComponentModel;
namespace PropertyGridDemo
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
// 初始化PropertyGrid并绑定对象
PropertyGrid propertyGrid = new PropertyGrid();
propertyGrid.Dock = DockStyle.Fill;
this.Controls.Add(propertyGrid);
// 绑定自定义对象
propertyGrid.SelectedObject = new UserConfig();
}
}
// 自定义配置类,属性会被PropertyGrid自动识别
public class UserConfig
{
[Category("基础信息")]
[DisplayName("用户名称")]
[Description("当前登录用户的名称")]
public string UserName { get; set; } = "默认用户";
[Category("基础信息")]
[DisplayName("用户年龄")]
[Description("当前登录用户的年龄")]
public int UserAge { get; set; } = 18;
[Category("偏好设置")]
[DisplayName("是否开启深色模式")]
[Description("控制界面是否使用深色主题")]
public bool IsDarkMode { get; set; } = false;
[Category("偏好设置")]
[DisplayName("主题颜色")]
[Description("界面的主色调")]
public Color ThemeColor { get; set; } = Color.Blue;
}
}
常用属性与特性配置
PropertyGrid的展示效果可以通过对象的特性(Attribute)和控件自身的属性来定制,常用的特性包括:
Category:设置属性所属的分类,相同分类的属性会被折叠在一起展示DisplayName:设置属性在PropertyGrid中显示的名称,避免直接展示英文属性名Description:设置属性的说明文字,选中属性时会在控件底部展示Browsable:设置为false时可以隐藏不需要展示的属性ReadOnly:设置为true时属性会变为只读,用户无法修改
PropertyGrid控件自身的常用属性如下:
| 属性名 | 作用说明 |
|---|---|
| SelectedObject | 绑定的要展示属性的对象,设置后自动刷新展示内容 |
| HelpVisible | 控制是否显示底部属性说明区域,默认值为true |
| ToolbarVisible | 控制是否显示顶部的分类、字母排序工具栏,默认值为true |
| PropertySort | 设置属性排序方式,可选按分类排序或按字母排序 |
自定义属性编辑方式
默认情况下PropertyGrid会根据属性类型自动选择编辑控件,比如字符串用文本框、布尔值用下拉框、颜色用颜色选择器。如果需要自定义编辑方式,可以实现自定义的编辑器。下面是一个给枚举类型添加自定义下拉选项的示例:
using System;
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing.Design;
namespace PropertyGridDemo
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
PropertyGrid propertyGrid = new PropertyGrid();
propertyGrid.Dock = DockStyle.Fill;
this.Controls.Add(propertyGrid);
propertyGrid.SelectedObject = new CustomConfig();
}
}
public class CustomConfig
{
[Category("自定义设置")]
[DisplayName("日志级别")]
[Description("选择系统日志的输出级别")]
[Editor(typeof(LogLevelEditor), typeof(UITypeEditor))]
public LogLevel Level { get; set; } = LogLevel.Info;
}
// 自定义枚举
public enum LogLevel
{
Debug,
Info,
Warn,
Error
}
// 自定义枚举编辑器,这里简化为直接返回枚举值,实际可以自定义下拉界面
public class LogLevelEditor : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
}
}
常见使用场景
PropertyGrid的适用场景非常广泛,常见的包括:
- 开发软件配置面板,快速展示和修改程序的各类配置项
- 可视化设计器中的属性面板,比如窗体设计器中展示选中控件的属性
- 数据对象的快速编辑工具,不需要为每个对象单独编写编辑界面
- 调试工具中展示对象的实时属性值,方便排查问题
需要注意的是,PropertyGrid只能展示对象的公开属性,如果需要展示私有字段或者动态生成的属性,需要额外编写类型描述器来实现。另外如果绑定的对象属性发生变化,需要手动调用PropertyGrid的Refresh方法才能更新展示内容。
PropertyGridWinForms属性编辑自定义属性数据绑定修改时间:2026-07-18 00:21:25