首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >依赖项属性的默认值是什么?

问依赖项属性的默认值是什么?
EN

Stack Overflow用户
提问于 2017-03-30 13:36:16
回答 2查看 1.6K关注 0票数 2

WPF依赖项属性可以通过将带有默认值的PropertyMetadata传递给Register函数来给出默认值:

代码语言:javascript
复制
 public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register("MyProperty", typeof(double), typeof(MyControl),
        new PropertyMetadata(0.0));

如果没有通过不传递PropertyMetadata或使用不指定默认值的PropertyMetadata构造函数来指定默认值,则依赖项属性的默认值是多少?

此页说

(对于属性注册没有指定元数据的情况,将创建带有该类默认值的默认PropertyMetadata。)

但我还没有找到任何地方描述这些默认值是什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-30 13:40:02

下面的引用代码是当DependencyProperty没有给出默认值时PropertyMetadata所调用的。

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

referencesource.microsoft.com

代码语言:javascript
复制
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;
 }
票数 2
EN

Stack Overflow用户

发布于 2017-03-30 14:18:59

如果没有通过不传递PropertyMetadata或使用不指定默认值的PropertyMetadata构造函数来指定默认值,则依赖项属性的默认值是多少?

默认值是依赖项属性类型的默认值,即对于double依赖项属性,它是0.0 (或default(double))。

您可以通过创建类的实例并访问依赖项属性的CLR包装器的getter来轻松地确认这一点:

代码语言:javascript
复制
MyControl ctrl = new MyControl();
var x = ctrl.MyProperty; // = 0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43119524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档