إنشاء مثيل لفئة متداخلة في XAML
-
28-09-2019 - |
سؤال
في XAML ملف (A WPF USERCONTROL) ، هل هناك طريقة للإشارة إلى الطبقة الداخلية "B" المحددة في فئة أخرى "أ"؟
public class A
{
public class B
{
}
}
شيء مثل :
<local:A.B ... />
لا يعمل بناء الجملة هذا لأن "B" يتم تفسيره على أنه خاصية تسمى "B" في الفصل "أ".
لقد جربت المزيد من بناء الجملة الغريبة مثل "::" أو "+" ولكن لا شيء يبدو أنه يعمل.
أنا أستخدم حاليًا Silverlight 4 مع VS2010.
شكرا مقدما لمساعدتكم.
المحلول
كنت أبحث وأبحث ، لأنه إذا كان ذلك ممكنًا ، أود أن أعرف. لسوء الحظ ، وجدت هذا على MSDN:
يجب ألا يكون فصلك المخصص فئة متداخلة. تتداخل الطبقات المتداخلة و "DOT" في بناء جملة استخدام CLR العام مع ميزات WPF و/أو XAML الأخرى مثل الخصائص المرفقة.
لذلك ، يبدو أنه لا يمكنك الرجوع إلى فئة متداخلة مع مشغل DOT. بالنسبة للطرق البديلة للوصول إلى هذا الفصل الداخلي من خلال XAML ، لم أحصل على أي حظ في عمليات البحث الخاصة بي حتى الآن. : o (لكن هذه مشكلة مثيرة للاهتمام إلى حد ما ، لذلك سأستمر في البحث. ربما سأجد بعض الحظ!: o)
نصائح أخرى
هذا السؤال قديم جدًا ، ولا أعرف ما إذا كان سيعمل مع إصدار WPF مرة أخرى في عام 2010 ، ولكن يمكنك الآن جعلها تعمل باستخدام الاسم "الحقيقي" (الداخلي) للنوع المتداخل:
<local:A+B />
إذا كنت قد نظرت من أي وقت مضى رمز تفكيك ، هكذا تبدو الأنواع المتداخلة:
ParentTypeName+Nested
.
يشير إلى منشأه; ؛ لست متأكدًا من سبب عدم تمكن XAML من البحث عن فئة متداخلة ، لكنها لا تفعل ذلك.
فئة متداخلة يستطيع أن تكون ممثلة عندما داخل سلسلة (على سبيل المثال قيمة الخاصية) ، باستخدام A+B
بدلاً من A.B
:
<Label SomeProperty1="{x:Static local:A+B.SomeProperty2}" />
كاسم عنصر (كما هو موضح في السؤال) ، +
غير مسموح به ، لأن النتيجة لن تكون صالحة XML ؛ +
ليس حرف اسم صالح:
XAML هو XML.
XML Spec - Namechar.
لذلك لا يمكن لاسم العنصر وصف فئة متداخلة مباشرة.
ولكن انظر التحديث أدناه - بناء جملة بديل يحل هذا.
تحديث
لكل تعليق Artfunkel على إجابة واحدة ، يجب أن يكون هذا حلًا [لم أختبر]:
<x:Type TypeName="local:A+B"/>
من: https://docs.microsoft.com/en-us/dotnet/framework/xaml-services/x-type-markup-extense
TBD كيفية تحديد الخصائص مع هذا بناء الجملة. يستخدم x:TypeArguments
?