Я думаю, что нашел решение этой проблемы.
Мне нужно было реализовать TypeConverter, чтобы заставить GetStandardValuesSupported возвращать false.
Затем я могу покончить со свойством TheColour ипросто используйте.
<CategoryAttribute("Order Colour"), _
Browsable(True), _
DisplayName("Custom Colour to Use"), _
Description("The background colour for orders from this terminal"), _
EditorAttribute(GetType(IKMDependency.ColourSelectorEditor), GetType(System.Drawing.Design.UITypeEditor)), _
TypeConverter(GetType(ColourTypeConverter))> _
Public Property Colour() As Color
Get
Return mColor
End Get
Set(ByVal value As Color)
If mColor <> value Then
mColor = value
mIsDirty = True
End If
End Set
End Property
это немного уродливо, потому что цвет представлен в поле как выбранный цвет, но текст печатается в оставшейся части PropertyGridCell, поэтому я также добавил некоторые переопределения в Converterпросто верните пустые строки.(Я бы предпочел закрасить всю ячейку цветом, а не просто маленьким квадратиком).
Класс Converter.
Public Class ColourTypeConverter
Inherits TypeConverter
Public Overrides Function GetStandardValuesSupported(ByVal context As System.ComponentModel.ITypeDescriptorContext) As Boolean
Return False
End Function
Public Overrides Function CanConvertFrom(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal sourceType As System.Type) As Boolean
If sourceType Is GetType(String) Then Return False
Return MyBase.CanConvertFrom(context, sourceType)
End Function
Public Overrides Function ConvertTo(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object, ByVal destinationType As System.Type) As Object
If destinationType Is GetType(String) Then Return String.Empty
Return MyBase.ConvertTo(context, culture, value, destinationType)
End Function
Public Overrides Function ConvertFrom(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object) As Object
Return MyBase.ConvertFrom(context, culture, value)
End Function
Public Overrides Function CanConvertTo(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal destinationType As System.Type) As Boolean
If destinationType Is GetType(String) Then Return False
Return MyBase.CanConvertTo(context, destinationType)
End Function
End Class