Как каждый говорит разработчику значение по умолчанию Свойства, когда это не один из типов, поддерживаемых DefaultValue()
? Например, a Padding
, или a Font
.
Обычно при использовании элемента управления Windows Forms значения по умолчанию будут в обычном шрифте в Окне свойств и изменились значения (не по умолчанию) будут полужирным. Например.
В этом образце, значении по умолчанию ShowAddress
false
и значение по умолчанию ShowName
true
. Этот эффект достигается со следующим:
[DefaultValue(false)]
public bool ShowAddress {
get { return mShowAddress; }
set {
mShowAddress = value;
Invalidate();
}
}
[DefaultValue(true)]
public bool ShowName { ... }
Однако, когда я пытался сделать что-то для Padding
, Я потерпел полный провал:
[DefaultValue(new Padding(2))]
public Padding LabelPadding { ... }
Который, конечно, не скомпилирует.
Как же я сделал бы это?
Попробуйте следующее:
private static Padding DefaultLabelPadding = new Padding(2);
private internalLabelPadding = DefaultLabelPadding;
public Padding LabelPadding { get { return internalLabelPadding; } set { internalLabelPadding = value; LayoutNow(); } }
// next comes the magic
bool ShouldSerializeLabelPadding() { return LabelPadding != DefaultLabelPadding; }
Браузер свойств ищет функцию с именем ShouldSerializeXYZ
для каждого свойства XYZ
. Каждый раз, когда ShouldSerializeXYZ
возвращает false, он ничего не записывает во время генерации кода.
РЕДАКТИРОВАТЬ: документация:
Попробуйте следующее:
[DefaultValue( typeof( Padding ), "2, 2, 2, 2" )]
public Padding LabelPadding
{
get { return _labelPadding; }
set { _labelPadding = value; }
}