依赖项 属性 的默认默认值是多少?
What is the default default value of a dependency property?
通过将具有默认值的 PropertyMetadata
传递给 Register
函数,可以为 WPF 依赖项 属性 赋予默认值:
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(double), typeof(MyControl),
new PropertyMetadata(0.0));
如果未指定默认值,则依赖项 属性 的默认值是多少,要么不传递 PropertyMetadata
要么使用未指定的 PropertyMetadata
构造函数默认值?
(For cases where a property registration does not specify metadata, a default PropertyMetadata is created with default values for that class.)
但我还没有找到描述这些默认值的地方。
下面的参考代码是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;
}
What is the default value for the dependency property if no default value is specified, either by not passing a PropertyMetadata or by using a PropertyMetadata constructor which doesn't specify a default value?
默认值是依赖类型的默认值属性,即对于double
依赖属性它是0.0
(或default(double)
).
您可以通过创建 class 的实例并访问依赖项 属性:
的 CLR 包装器的 getter 来轻松地自行确认这一点
MyControl ctrl = new MyControl();
var x = ctrl.MyProperty; // = 0
通过将具有默认值的 PropertyMetadata
传递给 Register
函数,可以为 WPF 依赖项 属性 赋予默认值:
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(double), typeof(MyControl),
new PropertyMetadata(0.0));
如果未指定默认值,则依赖项 属性 的默认值是多少,要么不传递 PropertyMetadata
要么使用未指定的 PropertyMetadata
构造函数默认值?
(For cases where a property registration does not specify metadata, a default PropertyMetadata is created with default values for that class.)
但我还没有找到描述这些默认值的地方。
下面的参考代码是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;
}
What is the default value for the dependency property if no default value is specified, either by not passing a PropertyMetadata or by using a PropertyMetadata constructor which doesn't specify a default value?
默认值是依赖类型的默认值属性,即对于double
依赖属性它是0.0
(或default(double)
).
您可以通过创建 class 的实例并访问依赖项 属性:
的 CLR 包装器的 getter 来轻松地自行确认这一点MyControl ctrl = new MyControl();
var x = ctrl.MyProperty; // = 0