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)));

2番目の登録は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 でも同じクラスでそれらを 2 回書き込むことはできません。

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 に答える