1

次のようなカスタム依存関係プロパティを含むコントロールがあります。

 public static readonly DependencyProperty MouseEnterColorProperty =
            DependencyProperty.Register("MouseEnterColor", typeof (Color), typeof (SCADAPolyline), new PropertyMetadata(default(Color)));

        public Color MouseEnterColor
        {
            get { return (Color) GetValue(MouseEnterColorProperty); }
            set { SetValue(MouseEnterColorProperty, value); }
        }

その奇妙な問題。新しい値を設定するためにプロパティを取得するためにリフレクションを使用していますが、プロパティを取得できません。type.GetFields()からすべての可能性を試しました。

 FieldInfo fieldInfo = type.GetField(name, BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static);

or 

 fieldInfo = type.GetFields(BindingFlags.Static | BindingFlags.Public)
                                          .Where(p => p.FieldType.Equals(typeof(DependencyProperty)) && p.Name==name).FirstOrDefault();

私の財産が見つからないようです。アクセスできず、この問題で私はとても怒っています。どうすればこの問題を解決できますか?Silverlight5.0を使用しています

4

1 に答える 1

0

依存関係プロパティはフィールドではありません。通常の意味でのクラス定義の一部ではありません。

舞台裏では、依存関係プロパティのコレクションに保存されます。

それらにアクセスする方法のガイドとして、ここからこの例を試してください。

    public static class DependencyObjectHelper
    {
        public static List<DependencyProperty> GetDependencyProperties(Object element)
        {
            List<DependencyProperty> properties = new List<DependencyProperty>();
            MarkupObject markupObject = MarkupWriter.GetMarkupObjectFor(element);
            if (markupObject != null)
            {
                foreach (MarkupProperty mp in markupObject.Properties)
                {
                    if (mp.DependencyProperty != null)
                    {
                        properties.Add(mp.DependencyProperty);
                    }
                }
            }

            return properties;
        }
于 2012-05-24T09:08:10.007 に答える