依赖项 属性 的默认默认值是多少?

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 构造函数默认值?

This page

(For cases where a property registration does not specify metadata, a default PropertyMetadata is created with default values for that class.)

但我还没有找到描述这些默认值的地方。

下面的参考代码是DependencyPropertyPropertyMetadata没有给出默认值时调用的代码。

它在大多数情况下使用标准 default values(引用类型为 null,值类型为零),但对于枚举,它使用第一个枚举器而不是值为 0 的枚举器(如果它们不同)。

referencesource.microsoft.com

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