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

标签 c# vb.net propertygrid

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

enter image description here

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

如果我无法修改原来的类怎么办?是否有处理属性网格内的自定义对象扩展的通用方法?

最佳答案

您可以在运行时为 ExpandableObjectConverter 动态添加 TypeConverterAttribute,使用类似以下内容 (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#!)

关于c# - 在属性网格中扩展自定义对象而不对类进行任何修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24151066/

相关文章:

c# - 使用 C# 解析复杂的 JSON

c# - 处理可能的 IEnumerable 多重枚举警告

vb.net - VB中的错误捕获帮助

vb.net - 有人可以以最简单的方式解释 VB.net 中的 'mod' 运算符吗?

c# - 渐变不透明度不起作用 (WPF)

.net - Nhibernate vb.net mvc 无法编译映射

.net - 如何在属性网格中将 bool 属性显示为"is" |“否”?

c# - 如何从 PropertyGrid 中删除/隐藏 'Property Pages' 按钮?

c# - 将 ExpandableObjectConverter 与下拉列表结合起来

c# - iOS 与 .Net 应用程序通信