Я пытаюсь добавить вложенное свойство в свой пользовательский элемент управления с помощью TypeConverter, вот мой тестовый код:
public class TestNestedOptionConverter : TypeConverter
{
public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context,
object value, Attribute[] filter)
{
return TypeDescriptor.GetProperties(typeof(TestNestedOption));
}
public override bool GetPropertiesSupported(ITypeDescriptorContext context)
{
return true;
}
}
[TypeConverter(typeof(TestNestedOptionConverter))]
public class TestNestedOption
{
bool test1 = false;
[Description("TestParam1")]
public bool Test1
{
get { return test1; }
set { test1 = value; }
}
[Description("TestParam2")]
public int Test2 { get; set; }
}
public partial class UserControl1 : UserControl
{
public TestNestedOption TestOption { get; set; }
public UserControl1()
{
InitializeComponent();
}
}
Когда я добавляю элемент управления в форму, я вижу свойство TestOption всетка свойств дизайнера, но подчиненные свойства вообще не отображаются (рядом с TestOption нет даже окна расширения).
Мое понимание этого заключается в том, что предполагается, что это своего рода рекурсивный вызов метода GetProperties()
для каждого свойства, поэтому в качестве тестового хака я поместил MessageBox.Show()
в метод TestNestedOptionConverter.GetProperties()
, и я надеваюне вижу сообщения, когда дизайнер загружает элемент управления.Это заставляет меня думать, что переопределенный GetProperties()
никогда не вызывается дизайнером по какой-то причине.
Есть идеи о том, что я делаю неправильно?
Я использую Visual Studio 2008.