You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为UserControl的自定义属性创建自定义分类及子分类

实现带子分类的自定义属性分组

我之前刚好解决过这个需求,其实实现带子分类的自定义属性分组比你想的简单——核心就是利用.NET自带的CategoryAttribute,通过**斜杠(/)**分隔分类层级,WinForms的属性窗口会自动把它渲染成可折叠的父子分类结构!

具体实现步骤

1. 给自定义属性标记层级化分类

只需要在Category特性的参数里,用父分类名/子分类名的格式指定分组,再配合DisplayNameAttribute和DescriptionAttribute让属性窗口更友好:

using System.ComponentModel;

public partial class MyCustomUserControl : UserControl
{
    // 归入「自定义分类名称 -> 自定义子分类」下的属性
    [Category("自定义分类名称/自定义子分类")]
    [DisplayName("我的属性1")]
    [Description("标题: 值1的说明")]
    public string MyProperty1 { get; set; } = "值1";

    // 同一个子分类下的第二个属性
    [Category("自定义分类名称/自定义子分类")]
    [DisplayName("我的属性2")]
    [Description("标题: 值2的说明")]
    public int MyProperty2 { get; set; } = 200;

    // 可选:直接放在父分类下的属性
    [Category("自定义分类名称")]
    [DisplayName("父分类直接属性")]
    public bool ParentDirectProperty { get; set; } = true;
}

2. 查看效果

编译后把你的UserControl拖到窗体上,打开属性窗口(按F4):

  • 会看到一个名为「自定义分类名称」的可折叠父分组
  • 展开父分组后,里面会显示「自定义子分类」子分组,以及你直接放在父分类下的属性
  • 子分组里就是你标记了对应Category的MyProperty1和MyProperty2

进阶:多层嵌套子分类

如果需要更深的层级(比如父分类/子分类/孙分类),直接继续叠加斜杠即可:

[Category("自定义分类名称/自定义子分类/孙级子分类")]
[DisplayName("深层嵌套属性")]
public string DeepNestedProperty { get; set; } = "深层值";

注意点

  • 这个方法适用于WinForms的属性窗口,WPF的属性窗口也支持类似逻辑,但渲染细节略有不同
  • 分类名称的大小写会影响分组的合并,尽量保持命名一致
  • 如果需要属性在设计时修改后实时刷新控件外观,记得实现INotifyPropertyChanged接口

内容的提问来源于stack exchange,提问作者Simos Sigma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:15:47