如果我有类似以下类的代码我无法更改,那么如何在运行时将EditorAttribute添加到s1
?
class TestClass
{
public String s1 {get;set;}
public String s2 {get;set;}
}
我尝试了这种方法,但它也将一个EditorAttribute编辑器添加到s2
,我不希望这样。
TypeDescriptor.AddAttributes(
typeof(String),
new EditorAttribute (
typeof(MyUITypeEditor),
typeof(UITypeEditor)));
我该怎么做?
答案 0 :(得分:0)
您可以尝试使用CustomTypeDescriptor为类实现自己的类型描述符,并覆盖GetProperties方法以返回一组自定义属性描述符,这将使您有机会添加任何自定义属性的任何属性你希望。
一旦有了这个自定义类型描述符,就可以将该类的实例(可以将TestClass
类的实例包装)绑定到PropertyGrid控件。
如下所示:
public class TestClassTypeDescriptor : ICustomTypeDescriptor
{
private TestClass mInst;
public TestClassTypeDescriptor(TestClass inst)
{
mInst = inst;
}
//Implement ICustomTypeDescriptor
}
PropGridControl.SelectedObject = new TestClassTypeDescriptor(new TestClass());
您可能需要创建自己的PropertyDescriptor和PropertyDescriptorCollection派生版本,但这些版本的实施非常简单