简介

KryptonPropertyGrid 是增强型属性网格控件,替代标准 System.Windows.Forms.PropertyGrid。它自动跟随 Krypton 主题渲染,以分类/字母排序方式展示对象的公开属性,支持属性编辑、分类折叠、描述面板等。常用于设计器、配置编辑器、对象检查器等场景。

KryptonPropertyGrid 示例截图
KryptonPropertyGrid 属性网格效果

常用属性

属性类型说明
SelectedObjectobject当前展示属性的目标对象
SelectedObjectsobject[]多对象选择(显示公共属性)
PropertySortPropertySort排序方式(Categorized / Alphabetical / NoSort)
HelpVisiblebool是否显示底部描述面板
ToolbarVisiblebool是否显示顶部工具栏(排序切换按钮)
BackColorColor网格背景色
ForeColorColor网格文字颜色
LineColorColor网格线颜色
CategoryForeColorColor分类标题文字颜色
CommandsVisibleIfAvailablebool是否显示属性命令按钮
DockDockStyle停靠方式(常用于 Fill)

快速上手

基本用法

using Krypton.Toolkit;

// 创建属性网格
var propertyGrid = new KryptonPropertyGrid();
propertyGrid.Dock = DockStyle.Fill;
propertyGrid.HelpVisible = true;
propertyGrid.ToolbarVisible = true;
propertyGrid.PropertySort = PropertySort.Categorized;

// 展示某个对象的属性
propertyGrid.SelectedObject = this;  // 显示当前窗体的属性

this.Controls.Add(propertyGrid);

展示自定义对象

using System.ComponentModel;

// 定义带描述特性的配置类
public class AppSettings
{
    [Category("外观")]
    [Description("窗口标题文字")]
    public string Title { get; set; } = "我的应用";

    [Category("外观")]
    [Description("主题颜色")]
    public Color ThemeColor { get; set; } = Color.Teal;

    [Category("行为")]
    [Description("启动时是否最大化")]
    public bool StartMaximized { get; set; } = false;

    [Category("行为")]
    [Description("自动保存间隔(秒)")]
    public int AutoSaveInterval { get; set; } = 60;
}

// 展示配置对象
var settings = new AppSettings();
propertyGrid.SelectedObject = settings;

// 属性值修改后应用
propertyGrid.PropertyValueChanged += (s, e) =>
{
    ApplySettings(settings);
};

进阶用法

对象检查器(选中控件显示其属性)

// 点击窗体上的控件时,在属性网格中显示该控件的属性
private void Form1_Load(object sender, EventArgs e)
{
    foreach (Control ctrl in this.Controls)
    {
        ctrl.Click += (s, ev) =>
        {
            propertyGrid.SelectedObject = s as Control;
        };
    }
}

// 属性修改后刷新目标控件
propertyGrid.PropertyValueChanged += (s, e) =>
{
    if (propertyGrid.SelectedObject is Control ctrl)
    {
        ctrl.Refresh();
    }
};

多对象编辑(公共属性)

// 同时选中多个控件,编辑它们的公共属性
var selectedControls = new object[] { button1, button2, button3 };
propertyGrid.SelectedObjects = selectedControls;

// 修改 Font 属性会同时应用到所有选中的按钮
propertyGrid.PropertyValueChanged += (s, e) =>
{
    foreach (var obj in propertyGrid.SelectedObjects)
    {
        if (obj is Control ctrl)
            ctrl.Refresh();
    }
};
提示:使用 [Category][Description][Browsable(false)][ReadOnly(true)] 等特性可以精细控制属性在网格中的显示方式。

对应示例项目

📁 Source/Krypton Toolkit Examples/KryptonPropertyGrid Examples/

包含:基本属性展示、自定义对象、对象检查器、多对象编辑演示。

相关控件