0

看看这段代码:

var property = DependencyProperty.RegisterAttached(
                "SomeAttachedProperty",
                typeof(object),
                typeof(View),
                new PropertyMetadata(default(object)));

var sameProperty = DependencyProperty.RegisterAttached(
                "SomeAttachedProperty",
                typeof(object),
                typeof(View),
                new PropertyMetadata(default(object)));

WPF 中的第二次注册失败,AgrumentException显示“属性已注册”(这是正确的)。

在 WPF 的反编译源中,DependencyProperty我发现:

FromNameKey key = new FromNameKey(name, ownerType);
lock (Synchronized) 
{ 
     if (PropertyFromName.Contains(key))
     { 
          throw new ArgumentException(SR.Get(SRID.PropertyAlreadyRegistered,
                                      name, ownerType.Name));
     }
}

但是在 SL 中,我没有找到任何对具有相同名称和类型的现有属性的检查。

所以问题是为什么 SL 不检查它而 WPF 呢?有一些基本的限制还是什么?

谢谢你。

4

1 回答 1

2

如果没有静态 Get 和 Set 访问器,附加依赖属性的注册是不完整的,即使在 Silverlight 中,您也不能在同一个类中将它们写两次。

class MayClass
{
    public static readonly DependencyProperty SomethingProperty =
        DependencyProperty.RegisterAttached(
           "Something", typeof(object), typeof(MyClass));

    // required
    public static object GetSomething(UIElement element)
    {
        return element.GetValue(SomethingProperty );
    }

    // required
    public static void SetSomething(UIElement element, object value)
    {
        element.SetValue(SomethingProperty , value);
    }
}
于 2012-11-08T10:05:38.203 回答