2015-11-22 5 views
3

Я расширил стандартный элемент управления TextBox для поддержки прокладки. Это работает, за исключением того, что среда IDE не сохраняет заполнение в классе конструктора.Атрибут Bindable не работает

Код:

[EditorBrowsable(EditorBrowsableState.Always)] 
    [Browsable(true)] 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] 
    [Bindable(true)] 
    public new Padding Padding 
    { 
     get 
     { 
      return padding; 
     } 
     set 
     { 
      padding = value; 
      OnPaddingChanged(EventArgs.Empty); 
     } 
    } 

Как ни странно, если бы я изменить имя свойства для MyPadding или что-нибудь еще, он вдруг работает. Что вызывает эту проблему?

+0

Try public Padding @Padding – Nostradamus

+0

Нет, не работает. – user990827

+0

Кажется, что ваш единственный вариант - выбрать другое имя ... –

ответ

2

При теневые свойства базового класса просто изменить некоторые атрибуты, не использовать собственное поле подложки, но и саму базу свойство, как этот

[EditorBrowsable(EditorBrowsableState.Always)] 
[Browsable(true)] 
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] 
[Bindable(true)] 
public new Padding Padding 
{ 
    get { return base.Padding; } 
    set { base.Padding = value; } 
} 

P.S. Хотя приведенный выше код решает проблему персистентности, я не совсем уверен, что вы подразумеваете под «это работает», потому что для того, чтобы быть скрытым, необходимо, чтобы соответствующее свойство Control было специально затенено в классе TextBoxBase.

+0

Так как по умолчанию не поддерживается элемент управления TextBox, я использую вызовы winapi в обработчике событий PaddingChanged. – user990827

+0

Итак, ваше решение работает, но знаете ли вы также, почему необходимо использовать базовое свойство? Почему IDE не работает с реализацией пользовательских свойств? – user990827

+0

Трудно объяснить, существует множество правил, связанных с сериализацией, а что нет. Но логично думать, что довольно сложный производный класс имеет то же свойство, что и базовый класс, и имеет другое значение, и не только запутывает. Представьте себе: var tb = new YourTextBox(); var tb1 = (TextBox) tb; 'и' tb.Padding' отличается от 'tb1.Padding'. –

Смежные вопросы