カテゴリも追加して、PropertyGrid でより整理された方法で表示するカスタム PropertyDescriptor のセットがあります。PropertyDescriptor の各タイプを特定のカテゴリに分類したいと考えています。
TypeDescriptor.AddAttributes() を使用して既存の PropertyDescriptor に属性を追加しようとしましたが、カテゴリ属性が追加されません。
CategoryAttribute intrinsicPropertyCategory = new CategoryAttribute("Intrinsic Properties");
currentDescriptor = new IntrinsicPropertyDescriptor(def);
TypeDescriptor.AddAttributes(currentDescriptor, new Attribute[] { intrinsicPropertyCategory });
また、以下に示すように、PropertyDescriptor の 1 つのコンストラクターで TypeDescriptor.AddAttributes() を使用してみました。しかし、それも機能しません。
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 は、2 つの異なるカスタム PropertyDescriptors IntrinsicPropertyDescriptor および InferedIntrinsicPropertyDescriptor で表示できます。すべての IntrinsicPropertyDescriptor にはカテゴリ属性 "Intrinsic Properties" が必要であり、すべての InferedIntrinsicPropertyDescriptor にはカテゴリ属性 "Inferred Intrinsic Properties" が必要です。