Visual Studio属性窗格中具有子属性的自定义属性

时间:2014-09-21 09:16:24

标签: c# .net winforms visual-studio

由于我不知道完全要搜索的内容,因此我无法找到相关文档。但我之前已经看过它是如何在某些方面完成的,所以我能够在Visual Studio的属性窗格中显示一些属性,但是我现在需要在属性窗格中添加一个带有子属性的属性。我现在回到原点 - 不知道要搜索什么,不能实现它,因为我找不到相关信息。

在大多数控件的“属性”窗格中,您将看到:

外观

  • 背景色
  • 前景色
  • 字体
    • 字体系列
    • 字体大小等

我已经可以这样做了:

外观

  • 背景色
  • 前景色
  • 万岁!颜色

但是,现在我需要像默认的Font属性一样(添加一个属性,但是具有可扩展/可折叠的子属性,如下所示:

enter image description here

目前,我知道在VS的属性窗格中获取自定义属性的唯一方法是执行以下操作:

public Boolean isBaeltazorAwesome { get; set; }

这将在属性窗格中显示单个属性。但我需要类似下图所示的内容,您可以在其中展开Font属性并获得更多可编辑的子属性。

如何做到这一点?

我知道寻找参考/非现场资源是"非主题",但如果你知道任何我会很感激,如果你可以分享。当我不知道要使用什么术语时,我根本不知道如何搜索某些内容。这有点奇怪吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试为自定义属性的类型声明定义TypeConverter属性:

[TypeConverter(typeof(MyPropertyConverter))]
public struct MyProperty
{
    ...
}

public class MyPropertyConverter : TypeConverter
{
    public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, Object value, Attribute[] attributes)
    {
        PropertyDescriptorCollection collection = TypeDescriptor.GetProperties(typeof(MyProperty));
        // Reorganize the collection of sub-properties
        return collection;
    }

    // overrides of the methods: CanConvertTo, ConvertTo, CanConvertFrom, ConvertFrom etc
}

参见示例:Implementing TypeConverter for Windows Forms