Ответ 1
Атрибут [DefaultValue(...)]
- это подсказка для разработчиков и генераторов кода. Это НЕ инструкция для компилятора.
Дополнительная информация в эта статья в KB.
Я правильно понял значение, используя:
[DefaultValue ( typeof ( Color ), "255, 0, 0" )]
public Color LineColor
{
get { return lineColor; }
set { lineColor = value; Invalidate ( ); }
}
Но после перезагрузки проекта используется элемент управления, для этого значения задано значение "Белый", которое я могу вызвать Reset, чтобы снова вернуться к красному, но я не понимаю проблему.
Как вы должны установить значение по умолчанию и убедиться, что оно сохранено, если я не изменил значение вручную по умолчанию?
Собственно, я также делаю это, что устанавливает Back и ForeColor для этих значений, а редактор свойств VS показывает их, как если бы они были изменены из значения по умолчанию.
Это неправильно?
public CoolGroupBox ( )
{
InitializeComponent ( );
base.BackColor = Color.FromArgb ( 5, 5, 5 );
base.ForeColor = Color.FromArgb ( 0, 0, 0 );
}
Атрибут [DefaultValue(...)]
- это подсказка для разработчиков и генераторов кода. Это НЕ инструкция для компилятора.
Дополнительная информация в эта статья в KB.
Хитрость заключается в использовании шестнадцатеричного кода цвета:
[DefaultValue(typeof(Color), "0xFF0000")]
public Color LineColor
{
get { return lineColor; }
set { lineColor = value; Invalidate ( ); }
}
Я думаю, вы также можете использовать "255, 0, 0", но я не уверен и обычно использовал либо именованные цвета, либо шестнадцатеричный код.
Как просто установить для переменной частного члена нужный цвет по умолчанию?
private Color lineColor = Color.Red;
public Color LineColor
{
get { return lineColor; }
set { lineColor = value; Invalidate ( ); }
}
Если вы хотите, чтобы он был сохранен, просто выньте аксессуар.
Изменить
Я вижу, вы хотите, чтобы список свойств в дизайнере отображал цвет по умолчанию.
Вы должны переопределить свойство BackColor базового элемента управления, добавить новый атрибут DefaultValueAttribute для своего нового свойства, а затем на самом деле установить цвет по умолчанию в конструкторе или в методе InitializeComponent() (в файле designer.cs), что, вероятно, лучше, поскольку это для дизайнера.
public partial class RedBackgroundControl : UserControl
{
public RedBackgroundControl()
{
InitializeComponent();
base.BackColor = Color.Red;
}
[DefaultValue(typeof(Color), "Red")]
new public Color BackColor
{
get
{
return base.BackColor;
}
set
{
base.BackColor = value;
}
}
}
Мне не повезло с помощью атрибута DefaultValue
со свойствами типа Color
или типа Font
, но я преуспел в этих методах, описанных в документации msdn:
"Определение значений по умолчанию с помощью методов ShouldSerialize и Reset http://msdn.microsoft.com/en-us/library/53b8022e(v=vs.90).aspx
Я использовал Color.Empty
и null
, соответственно, как значения для моих личных полей поддержки и публичные свойства всегда возвращали что-то полезное.
Существует довольно статья о инициализации свойства defaultvalue на CodeProject
В DependencyProperty используйте UIPropertyMetadatap >
как:
public static DependencyProperty TrueColorProperty = DependencyProperty.Register(
"TrueColor", typeof (Color), typeof (LedControl), new UIPropertyMetadata(Colors.Red));