Добавление EditorAttribute во время выполнения (динамически) к специальному свойству объекта
Если у меня есть класс, подобный следующему, код которого я не могу изменить, как я могу добавить 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)));
Как я могу это сделать?
1 ответ
Вы можете попробовать реализовать свой собственный дескриптор типа для класса с помощью 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, но они довольно просты в реализации