كيفية استخدام الانعكاس للحصول على bindingexpression (والقيمة) لعناصر التحكم التي تحتوي على محتوى في Silverlight

StackOverflow https://stackoverflow.com/questions/2496238

سؤال

أحتاج إلى استخدام الانعكاس للحصول على قيمة الربط في عنصر تحكم هو DataGridTemplateColumn (على سبيل المثال HyperLinkButton). هل يعرف أحد كيف يمكنني القيام بذلك؟

يبدو الأمر بسيطًا بما يكفي للقيام بذلك باستخدام TextBlock لأنه يحتوي TextProperty خاصية التبعية ، لكن لا يمكنني الحصول على تعبير ملزم من عنصر تحكم ليس له فوري TextProperty. فيما يلي الرمز الذي أستخدمه للحصول على تعبير الربط لـ TextBlock:

FrameworkElement fe = (FrameworkElement)dependencyObj;
FieldInfo fi = fe.GetType().GetField("TextProperty");
BindingExpression bindingExpression = fe.GetBindingExpression((DependencyProperty)fi.GetValue(null))

ومع ذلك ، فإن الكود التالي لا يعمل أبدًا مع كائن التبعية الذي هو HyperLinkButton:

FieldInfo fi = fe.GetType().GetField("ContentProperty");

هل يعرف أي شخص كيف قد أتمكن من الحصول على BindingExpression (وقيمة الربط) لمحتوى أ HyperLinkButton?

هل كانت مفيدة؟

المحلول

هل حاولت إضافة أعلام الربط الصحيحة لهذا الحقل؟ يبدو وكأنه حالة من أعلام الربط غير الكفاءة عند استخدام الانعكاس. يحتوي TextBlock على حقل مستقر نص على TextBlock ، حيث يحتوي Kyperlinkbutton على محتوى ورث من ContentControl.

حاول استخدام أعلام الربط الثابتة والعامة والتسلسلات الإلكترونية:

FieldInfo fi = fe.GetType().GetField("ContentProperty", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);

يجب أن تخبر إضافة العلم الربط الانعكاس التسلسل المتسلية الانعكاس للبحث في التسلسل الهرمي للصف للعثور على هذا المجال الثابت العام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top