通过将PropertyMetadata
的默认值传递给Register
函数,可以为WPF依赖属性赋予默认值:
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(double), typeof(MyControl),
new PropertyMetadata(0.0));
如果没有指定默认值,依赖项属性的默认值是什么,通过不传递PropertyMetadata
或使用没有指定默认值的PropertyMetadata
构造函数?
(对于属性注册未指定元数据的情况,将使用该类的默认值创建默认PropertyMetadata。)
但我还没有找到描述这些默认值的地方。
答案 0 :(得分:1)
以下参考代码是DependencyProperty
在PropertyMetadata
未给出默认值时调用的内容。
在大多数情况下它使用标准default values(null
用于引用类型,为值类型归零),但对于枚举,它使用第一个枚举器而不是值为0的枚举器(如果它们是不同的。)
private static object GetDefaultValue(string name, System.Type propertyType, System.Type ownerType)
{
if (name == null)
throw new ArgumentNullException("name");
if (name.Length == 0)
throw new ArgumentException(SR.GetString(SR.Error_EmptyArgument), "name");
if (propertyType == null)
throw new ArgumentNullException("propertyType");
if (ownerType == null)
throw new ArgumentNullException("ownerType");
object defaultValue = null;
if (propertyType.IsValueType)
{
try
{
if (propertyType.IsEnum)
{
Array values = Enum.GetValues(propertyType);
if (values.Length > 0)
defaultValue = values.GetValue(0);
else
defaultValue = Activator.CreateInstance(propertyType);
}
else
defaultValue = Activator.CreateInstance(propertyType);
}
catch
{
}
}
return defaultValue;
}
答案 1 :(得分:1)
如果未指定默认值,依赖项属性的默认值是什么,通过不传递PropertyMetadata或使用未指定默认值的PropertyMetadata构造函数?
默认值是依赖项属性类型的默认值,即对于double
依赖项属性,它是0.0
(或default(double)
)。
您可以通过创建类的实例并访问依赖项属性的CLR包装器的getter来轻松地自行确认:
MyControl ctrl = new MyControl();
var x = ctrl.MyProperty; // = 0