我在用户控件中得到了这段代码:
[DefaultValue(typeof(Color), "Red")] public Color MyColor { get; set; }
如何更改MyColor
为默认值?
在DefaultValueAttribute
不设置该属性的值,它是纯粹的信息.Visual Studio设计器将此值显示为非粗体,其他值显示为粗体(已更改),但您仍需将属性设置为构造函数中的值.
如果值由用户设置,设计器将为属性生成代码,但您可以通过右键单击属性并单击来删除该代码Reset
.
DefaultValueAttribute
编译器不使用它,并且(可能容易引起混淆)它不会设置初始值.你需要在构造函数中自己做这个.那个地方做应用DefaultValueAttribute
包括:
PropertyDescriptor
- 提供ShouldSerializeValue
(由PropertyGrid
等使用)
XmlSerializer
/ DataContractSerializer
/ etc(序列化框架) - 用于决定是否需要包含它
相反,添加一个构造函数:
public MyType() { MyColor = Color.Red; }
(如果是struct
自定义构造函数,则需要先调用:base()
)
它是非正式的,但您可以通过反射使用它,例如,在构造函数中放置以下内容:
foreach (PropertyInfo p in this.GetType().GetProperties()) { foreach (Attribute attr in p.GetCustomAttributes(true)) { if (attr is DefaultValueAttribute) { DefaultValueAttribute dv = (DefaultValueAttribute)attr; p.SetValue(this, dv.Value); } } }