WPF依赖项属性可以通过将带有默认值的PropertyMetadata传递给Register函数来给出默认值:
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(double), typeof(MyControl),
new PropertyMetadata(0.0));如果没有通过不传递PropertyMetadata或使用不指定默认值的PropertyMetadata构造函数来指定默认值,则依赖项属性的默认值是多少?
此页说
(对于属性注册没有指定元数据的情况,将创建带有该类默认值的默认PropertyMetadata。)
但我还没有找到任何地方描述这些默认值是什么。
发布于 2017-03-30 13:40:02
下面的引用代码是当DependencyProperty没有给出默认值时PropertyMetadata所调用的。
在大多数情况下,它使用标准的默认值 (引用类型为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;
}发布于 2017-03-30 14:18:59
如果没有通过不传递PropertyMetadata或使用不指定默认值的PropertyMetadata构造函数来指定默认值,则依赖项属性的默认值是多少?
默认值是依赖项属性类型的默认值,即对于double依赖项属性,它是0.0 (或default(double))。
您可以通过创建类的实例并访问依赖项属性的CLR包装器的getter来轻松地确认这一点:
MyControl ctrl = new MyControl();
var x = ctrl.MyProperty; // = 0https://stackoverflow.com/questions/43119524
复制相似问题