У меня есть набор пользовательских PropertyDescriptor, который я тоже хочу добавить категории, чтобы они отображались более организованно в PropertyGrid. Я хочу, чтобы каждый тип PropertyDescriptor входил в определенную категорию.
Я пытался использовать TypeDescriptor.AddAttributes () для добавления атрибутов в существующий PropertyDescriptor, но атрибут категории не добавляется.
CategoryAttribute intrinsicPropertyCategory = new CategoryAttribute("Intrinsic Properties");
currentDescriptor = new IntrinsicPropertyDescriptor(def);
TypeDescriptor.AddAttributes(currentDescriptor, new Attribute[] { intrinsicPropertyCategory });
Я также пытался использовать TypeDescriptor.AddAttributes () в конструкторе для одного из моих PropertyDescriptors, как показано ниже. Но это тоже не работает.
public IntrinsicPropertyDescriptor(IntrinsicPropertyDef propDef): base(propDef.Key, propDef.Attributes)
{
this._type = propDef.Type;
this._key = propDef.Key;
this._readOnly = propDef.ReadOnly;
CategoryAttribute intrinsicPropertyCategory = new CategoryAttribute("Intrinsic Properties");
TypeDescriptor.AddAttributes(this, new Attribute[] { intrinsicPropertyCategory });
}
Я бы предпочел не тратить время на подробное описание того, почему я делаю то, что делаю. Но в приведенном выше примере IntrinsicPropertyDef является классом, который определяет свойство, включающее в себя имя, отображаемое имя и тип. Таким образом, propDef.Attributes включает DisplayNameAttribute.
IntrinsicPropertyDef может отображаться с двумя различными пользовательскими PropertyDescriptors, IntrinsicPropertyDescriptor и InferedIntrinsicPropertyDescriptor. Каждый IntrinsicPropertyDescriptor должен иметь атрибут категории «Внутренние свойства», а каждый InferedIntrinsicPropertyDescriptor должен иметь атрибут категории «Предполагаемые внутренние свойства».