من uitypeeditor ، استرجع سمة تم تطبيقها على الوالد الخاص بالممتلكات في .NET
-
21-09-2019 - |
سؤال
الأمر ليس بسيطًا تمامًا كما يقول العنوان ولكن آمل أن تفهم.
النظر في هذا السيناريو:
Class MyClass
Property SubProp1
End Property
-TypeEditor(whatever)-
Property SubProp2
End Property
End Class
Class MyButton
Inherits Button
-MyCustomAttribute-
Property MC as MyClass
End Property
End Class
بعد ذلك ، وضعت مثيلًا لـ MyButton في شبكة الممتلكات ، وتوسيع العقار MC وتحرير SubProp2.
من محرر النوع لـ SubProp2 ، أريد الحصول على السمة المطبقة على خاصية MC.
بالنظر إلى السياق ، propertyDescriptor.componentType ، وصلنا إلى النوع: myClass. إذا نظرت إلى السمات المطبقة على MyClass ، فإنها ستُرجع فقط السمات المطبقة مباشرة على MyClass ، وليس السمة الإضافية المطبقة على خاصية MC.
أنا أكافح من أجل العودة إلى MC حتى أتمكن من قراءة السمات المطبقة هناك. أي شخص أي أفكار؟
إيتا:
لقد أجبته أدناه:
المحلول 2
في الواقع ، علاوة على تعليقي على توماس ، هذا ممكن دون الربط المتأخر. إليك الطريقة:
DirectCast(context, GridItem).Parent.PropertyDescriptor.Attributes.
هاهو!
نصائح أخرى
إذا نظرت إلى السمات المطبقة على MyClass ، فإنها ستُرجع فقط السمات المطبقة مباشرة على MyClass ، وليس السمة الإضافية المطبقة على خاصية MC.
السمة المضافة إلى MC
لا تتم "إضافة" الخاصية إلى السمات المطبقة على MyClass
الصف ... السمات هي بيانات بيانات ثابتة ، لن يكون لديك سمة إضافية MyClass
فقط لأن خاصية من النوع MyClass
لديه هذه السمة. لا توجد علاقة بين الاثنين.
لا توجد وسيلة لاسترداد MyClass سمات خاصية MC ، إلا إذا قمت باستردادها مباشرة من MyButton
الفصل من خلال التفكير:
Dim prop As PropertyInfo = GetType(MyButton).GetProperty("MC")
Dim attributes As Attribute() = Attribute.GetCustomAttributes(prop)
لكنك لن تتمكن من استرداد تلك السمات باستخدام TypeDescriptor
, ، لأنه يمكن أن يمنحك فقط السمات المحددة على النوع ، وليس على الخصائص