سؤال

في 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?

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