在属性网格中展开自定义对象而不对类进行任何修改?

时间:2014-06-10 21:22:11

标签: c# vb.net propertygrid

默认情况下,自定义对象显示为灰色且不可展开:

enter image description here

我知道可以使用ExpandableObjectConverter扩展它们,但这需要扩展原始类。

如果我无法修改原班级怎么办?是否有一种在属性网格中处理自定义对象扩展的通用方法?

1 个答案:

答案 0 :(得分:2)

您可以在运行时为TypeConverterAttribute动态添加ExpandableObjectConverter,使用类似下面的内容(VB.NET)。

Dim attr = New TypeConverterAttribute(GetType(ExpandableObjectConverter))
TypeDescriptor.AddAttributes(GetType(ExtensionDataObject), attr)

对于您想要展开的每种类型,您需要AddAttribute。如果类型都在特定的命名空间中,您可以使用反射来查找它们:

Dim assm = Assembly.GetExecutingAssembly() ' or some other assembly
For Each t In assm.GetTypes().Where(Function(x) x.Namespace = "InterestingTypes")
    TypeDescriptor.AddAttributes(t, attr)
Next

(抱歉语法高亮 - 我应该使用C#!)