بناء جملة XAML بالتفاصيل

هذا الموضوع يعرّف المصطلحات المستخدمة لوصف عناصر بناء جملة XAML. هذه المصطلحات المستخدمة عادة خلال الجزء المتبقي من هذه الوثائق للوثائق WPF خصيصا وللحصول غير ذلك الإطارات التي تستخدم XAML أو المفاهيم أساسى XAML ممكّن اعتماد لغة XAML على المستوى النظام.Xaml. يتوسع هذا الموضوع في المصطلحات الأساسية المقدمة في الموضوع نظرة عامة على XAML (WPF).

يشتمل هذا الموضوع على الأقسام التالية.

  • مواصفات لغة XAML
  • XAML و CLR
  • بناء عنصر كائن
  • عناصر كائن
  • بناء جملة السمة (خصائص)
  • بناء جملة عنصر الخاصية
  • بناء جملة المجموعة
  • خصائص المحتوى XAML
  • حصائص المحتوى و بناء جملة المجموعة المدمج
  • مساحة أسماء XAML،
  • ملحقات العلامات
  • الخصائص المرفقة
  • الأحداث المرفقة
  • anatomy من XAML العنصر الجذر
  • الاستخدامات XAML اختياري و Nonrecommended
  • موضوعات ذات صلة

مواصفات لغة XAML

تعريف مصطلحات بناء جملة XAML هنا معرفة أو مرجوع إليها من مواصفات لغة XAML. XAML هي لغة تستند إلى XML و تتبع أو توسع قواعد بنية XML. بعض المصطلحات مشتركة أو مستندة إلى مصطلحات شائعة الاستخدام عند وصف لغة XML أو نموذج كائن مستند XML.

لمزيد من المعلومات حول مواصفات لغة XAML نزل MS-XAML من "مركز التنزيل لـ Microsoft".

XAML و CLR

XAML هي لغة علامات. وقت تشغيل اللغة العامة (CLR) ، كما يدل الاسم، تسمح بالتنفيذ أثناء وقت التشغيل. XAML بمفردها ليست إحدى اللغات الشائعة الاستهلاك المباشر وقت تشغيل CLR. بدلاً من ذلك، يمكنك اعتبار XAML كدعم للنظام الخاص بها. نظام تحليل XAML المستخدم من قبل WPF تحديدا اعتمد على CLR و نظام نوع CLR. يتم تعيين أنواع XAML إلى أنواع CLR لإنشاء تمثيل وقت التشغيل عند تحليل XAML لـ WPF. لهذا السبب، ستتضمن باقي مناقشة بناء الجملة في هذا المستند المراجع لنوع نظام CLR، على الرغم من أن المناقشات المكافئة لبناء الجملة في مواصفات لغة XAML لا تتضمنها. (في كل المستوى مواصفات لغة XAML، يمكن تعيين أنواع XAML إلى أي غير ذلك اكتب الالنظام، والذي لا يجب أن يكون CLR، ولكن التي قد تتطلب إنشاء واستخدام محلل XAML مختلفة.)

أعضاء الأنواع و توريث الفئات

خصائص وأحداث كـ تظهر كـ XAML الأعضاء WPFغالباً ما يتم توريث نوع من أنواع bكـe. على سبيل المثال، انظر في هذا المثال: <Button Background="Blue" .../>. Backgroundالخاصية هو غير خاصية معلن مباشرة تشغيل Buttonالفئة، إذا كنت تريد الاطلاع تشغيل تعريف الفئة، انعكاس نتائج، أو الوثائق. بدلاً من ذلك، Background موروث من الأساس Control فئة.

سلوك توريث فئة WPF عناصر XAML هو المغادرة هامة تفسير فرض المخطط من علامات XML. يمكن أن تصبح وراثة فئة معقدة، خاصة عندما تكون الوسيطة فئات أساسية مجردة، أو عندما يتم تضمين واجهات. هذا هو السبب الوحيد الذي يصعب التعيين عناصر XAML وسماتها المسموح بها إلى تمثل بشكل دقيق وكامل باستخدام أنواع المخططات التي تستخدم عادة XMLالبرمجة، مثل DTD أو XSD التنسيق. سبب آخر هو تلك التوافق مع البرامج الخارجية وميزات تعيين نوع لغة XAML نفسه preclude لاكتمال من أي تمثيل ثابت للمسموح بها أنواع وأعضاء.

بناء عنصر كائن

الكائن بناء الجملة هو بناء جملة العلامات XAML instantiates CLR فئة أو بنية بواسطة للتصريح XML . يشبه بناء الجملة التالي بناء الجملة لغات العلامات أخرى، مثل HTML. يبدأ بناء الجملة عنصر الكائن الأيسر قوس زاوية (<) متبوعاً اسم نوع فئة أو بنية يتم إنشاء مثيل فوراً. يمكن اتبع مسافات صفر أو أكثر من اسم نوع ثم يمكن تعريف سمات صفر أو أكثر أيضاً على العنصر الكائن مسافة واحدة أو أكثر مع فصل كل اسم السمة = زوج "قيمة". وأخيراً، قم بأي مما يلي يجب أن يتحقق:

  • يجب إغلاق "العنصر" و "علامة بواسطة مائلة للأمام (/) متبوعة مباشرة قوس الزاوية (& > &).

  • يجب إتمام العلامة فتح بواسطة قوس المثلث الأيمن (>). عناصر أخرى الكائن عناصر أو النص الداخلي أن تتبع العلامة فتح. تماما ما قد تكون موجودة هنا هو عادة مقيدة بطراز الكائن للعنصر. مكافئ إغلاق العلامة لـ أيضاً يجب أن يتواجد عنصر الكائن ، في المناسبة التداخل وموازنته الأخرى فتح وإغلاق أزواج العلامة.

XAML كـ المطبقة بواسطة.NET h كـ سمات التعيين من القواعد التي تقوم بتعيين عناصر الكائن إلى أنواع الخصائص أو الأحداث ومساحات الأسماء XAML لمساحات أسماء CLR بالإضافة إلى كـ sembly. لـ WPF .NET Framework عناصر الكائن XAML لتعيين Microsoft .NET التجميعات المشار إليها أنواع كما هو موضح في وتعيين السمات إلى من هذه الأنواع. عند الرجوع نوع CLR في XAML لديك حق الوصول الأعضاء الموروثة من هذا النوع.

على سبيل المثال، المثال التالي هو بناء جملة عنصر الكائن instantiates مثيل جديد من Button الفئة و ويحدد أيضاً Name وقيمة ذلك :

<Button Name="CheckoutButton"/>

المثال التالي هو بناء جملة عنصر الكائن يتضمن محتوى XAML أيضًا بناء الجملة. نص الداخلية الموجودة داخل التي سيتم استخدامها لتعيين TextBox المحتوى XAML ، Text.

<TextBox>This is a Text Box</TextBox>

طراز محتوى WPF

قد تعتمد فئة استخدام ككائن XAML يتعلق بناء الجملة لكنه التي ستقوم الدالة بشكل صحيح في تطبيق أو الصفحة فقط عندما يتم وضع في موضع متوقع طراز المحتوى أو شجرة. على سبيل المثال، MenuItem يجب عادةً فقط وضع كتابع من MenuBase اشتقاق فئة مثل Menu. المحتوى طرازات لـ الخاصة الموثّقة كجزء من الملاحظات على صفحات الفئة وعناصر أخرى WPF الفئات التي يمكن استخدامها كـ XAML .

عناصر كائن

خصائص في تم تعيينها من قبل مجموعة متنوعة من بُنى جمل المحتملة. يمكن استخدام أي بناء الجملة لخاصية معينة وتختلف استناداً إلى نوع النظام الصفات المميزة الأساسية للخاصية التي كنت إعداد.

بتعيين قيم الخصائص، يمكنك إضافة ميزات أو صفات إلى الكائنات أثناء وجودها في رسم كائن وقت التشغيل. حالة أولية لكائن تم إنشاؤه من عنصر كائن هو استناداً إلى سلوك المنشئ الافتراضي. بشكل عام، سيستخدم التطبيق الخاص بك شيء آخر غير بالكامل افتراضي نسخة من أي إعطاء .

بناء جملة السمة (خصائص)

بناء الجملة هو بناء جملة العلامات XAML الذي يقوم بتعيين قيمة لخاصية بواسطة للتصريح على عنصر كائن موجود. يجب أن يطابق اسم اسم عضو CLR الخاصية الفئة بالنسخ عنصر الكائن ذات الصلة. متبوعاً عامل تعيين (=). يجب أن تكون قيمة سلسلة محاطة ضمن علامات اقتباس.

ملاحظةملاحظة

يمكنك استخدام علامات الاقتباس مع تبديل اللونين لوضع علامة اقتباس حرفية داخل .على سبيل المثال يمكنك استخدام علامات الاقتباس المفردة كوسيلة التصريح عن سلسلة تحتوي على مزدوج الحرف اقتباس ضمنه.وسواءً كنت تستخدم علامات الاقتباس مفرد أو مزدوج يجب عليك استخدام زوج متطابق فتح و إغلاق قيمة سلسلة.هناك أيضا الهروب تسلسلات أو التقنيات الأخرى متوفر للعمل حول قيود الحرف المفروض بواسطة أي بناء XAML معينة.انظر الوحدات حرف XML و XAML

في ترتيب إلى المعينة من خلال بناء جملة السمة، خاصية يجب أن يكون عاماً يجب أن يكون الحقل قابل للكتابة. يجب أن يكون نوع القيمة القيمة خاصية في النظام نوع النسخ، أو يجب أن يكون نوع مرجع الذي يمكن أن يتم إنشاء مثيل أو مشار إليها بمعالج XAML عند الوصول إلى ذات الصلة النسخ للنوع.

لإحداث XAML WPF، حدث الذي هو المشار إليه كاسم السمة يجب أن يكون عاماً ومفوض عام.

أو الحدث يجب أن تكون عضواً في فئة أو بنية إنشاء مثيل من قبل عنصر يحتوي على الكائن.

معالجة قيم

السلسلة الموجودة داخل الفتح ثم إغلاق علامات الاقتباس تتم معالجتها بواسطة معالج XAML. خصائص ، يتم تحديد معالجة السلوك الافتراضي بواسطة نوع CLR الأساسي .

السمة فيكون بواسطة أحد الإجراءات التالية, يستخدم ترتيب معالجة هذا:

  1. إذا واجه معالج XAML الأقواس متعرجة أو عنصر كائن مشتقة من MarkupExtension ، ثم يتم تقييم ملحق العلامات المرجعية أولاً بدلاً من معالجة قيمة سلسلة "و" كائن تم إرجاعه بواسطة ملحق العلامات يتم استخدام قيمة. في الكثير من الحالات سيكون كائن تم إرجاعه بواسطة ملحق علامات مرجع كائن موجود أو تعبير الذي ينتظره تقييم حتى وقت التشغيل ومن أنه ليس كائن منشأ حديثاً.

  2. إذا كان يتم التصريح عن attributed TypeConverter ، أو نوع القيمة التي يتم التصريح عن مع attributed TypeConverter و إرسال قيمة سلسلة السمة محول نوع كإدخال تحويل, و المحول بإرجاع جديد الكائن مثيل.

  3. إذا كان هناك لم TypeConverter, تتم محاولة تحويل مباشر إلى نوع الخاصية. Th هو مستوى نهائي هو تحويل مباشر في القيمة الأصلية بمحلل بين الأنواع الأولية للغة XAML، أو تحقق من أسماء ثوابت مسماة لتعداد (يصل محلل بثم إلى قيم متطابقة).

تعداد قيم

معالجة التعدادات في XAML intrinsically بواسطة موزعي XAML و من التعداد يجب تحديد بواسطة تحديد اسم السلسلة أحد التعداد الخاص باسم ثوابت.

بالنسبة لقيم التعداد nonflag السلوك الأصلي معالجة السلسلة من القيمة وحل إلى إحدى قيم التعداد. لم تقم بتعيين في تنسيق . قيمة ، أثناء القيام في التعليمات البرمجية. بدلاً من ذلك، حدد فقط القيمةثم تعداد حتى الإشارة إليها ضمنياً به بواسطة النوع أنت على وشك تعيين. إذا قمت بتحديد في التعداد. قيمة النموذج، فإنه سوف لن حل بشكل صحيح.

للحصول على التعدادات flagwise السلوك يستند Enum.Parse الأسلوب. يمكنك تحديد عدة قيم تعداد flagwise بواسطة فصل كل قيمة فاصلة. ومع ذلك، لا يمكن ضم القيم غير flagwise. على سبيل المثال، لا يمكنك استخدام بناء جملة الفاصلة محاولة إنشاء Trigger الذي يعمل على شروط متعددة التعداد nonflag:

<!--This will not compile, because Visibility is not a flagwise enumeration.-->
...
<Trigger Property="Visibility" Value="Collapsed,Hidden">
  <Setter ... />
</Trigger>
...

يتم التعدادات flagwise يعتمد السمات التي تكون قابلة للتعيين في XAML نادرة في . ومع ذلك، يتم تعداد مثل StyleSimulations. قد يمكنك، على سبيل المثال، استخدام بناء جملة السمة flagwise بفواصل إلى تعديل المثال المتوفر في ملاحظات Glyphsفئة; StyleSimulations = "BoldSimulation"قد تصبح StyleSimulations = "BoldSimulation,ItalicSimulation". KeyBinding.Modifiersخاصية أخرى بحيث يكون المزيد قائمة تعداد يمكن أن يتم تعيين القيمة. ومع ذلك، يحدث هذه خاصية أن حالة خاص، لأن ModifierKeysالتعداد يعتمد محوّل النوع الخاص به. يستخدم محوّل نوع لمعدلات علامة زائد (+) كـ المحدد بدلاً من فاصلة (,). هذا تحويل يعتمد بناء الجملة الأكثر تقليدية إلى تمثل تركيبات المفاتيح في برمجة Windows Microsoft Office 2010 Suite، مثل "زر'Ctrl' + زر زر Alt".

خصائص و عضو اسم المراجع

عند تحديد أو يمكنك الرجوع إلى أي خاصية أو اكتب الحدث موجود كعضو CLR يمكنك إنشاء مثيل للعنصر كائن يحتوي على.

أو يمكنك الرجوع إلى المرفقة أو إرفاقه الحدث مستقلة عن عنصر الكائن يحتوي على. (خصائص المرفقة التي تمت مناقشتها في القادمة .)

يمكنك أيضًا تسمية أي حدث من أي كائن يتم الوصول إليها من خلال مساحة الاسم الافتراضية باستخدام typeName . الحدث اسم مؤهل بشكل جزئي; بناء الجملة هذا يدعم معالجات attaching وبالنسبة أيضاً لم يتم ذلك الحدث في توجيه الأحداث حيث تهدف المعالج لمعالجة الأحداث التوجيه من العناصر التابعة ولكن العنصر الأصل الخاصة به الجدول. يشبه بناء الجملة هذا على بناء جملة حدث مرفق ولكن الحدث هنا غير حدث مرفق صحيحاً. بدلاً من ذلك، يتم الرجوع إلى حدث اسم مؤهل. لمزيد من المعلومات، راجع نظرة عامة حول الأحداث الموجهة.

لبعض وحدات السيناريو، توفير أسماء الخصائص في بعض الأحيان كـ قيمة السمة، بدلاً من اسم السمة. يمكن أن تضمين اسم خاصية هذه المؤهلات، مثل كـ خاصية المحددة في نموذج ownerType . dependencyPropertyName . يتم هذا السيناريو الشائعة عند كتابة أنماط أو القوالب في . قواعد معالجة أسماء الخصائص المتوفرة كقيمة سمة مختلفة، ويتم التحكم فيها من قبل نوع التي يتم تعيين خاصية أو بالسلوك من الأنظمة الفرعية WPF معينة. للمزيد من التفاصيل ، راجع التنسيق و القولبة.

يتم استخدام أسماء الخصائص آخر عند وصف قيمة علاقة خاصية خاصية. هذه الميزة يتم استخدام ربط البيانات وأن أهداف لوحة العمل حيث يتم تمكين بشكل PropertyPath الفئة و به محول. للحصول إكمال وصف دلالات البحث, راجع بناء مسار جملة XAML.

بناء جملة عنصر الخاصية

بناء الجملة عنصر عبارة عن بناء جملة diverges حدٍ ما لتتوافق العديد من قواعد بناء جملة XML الأساسية لعناصر. في XML، قيمة سمة سلسلة de facto التباين ممكنة فقط يتم استخدام تنسيق ترميز أي سلسلة. في XAML ، يمكنك تعيين عناصر أخرى الكائن أن تكون القيمة من . يتم تمكين هذه القدرة بشكل بناء الجملة العنصر. بدلاً من خاصية يتم تعيينها على أنها داخل علامة عنصر الخاصية يتم تعيين باستخدام فتح علامة عنصر في elementTypeName . propertyName النموذج، يتم تعيين قيمة الخاصية داخل ومن ثم إغلاق عنصر خاصية.

وبوجه خاص، يبدأ بـ زاوية قوس أيسر (<) ، متبوعاً باسم نوع الفئة مباشرة بناء الجملة أو بناء التي بناء الجملة عنصر موجود ضمن. هذا هو متبوعاً مباشرة قبل نقطة واحدة (.) ثم بحسب الاسم ، ثم بواسطة قوس المثلث الأيمن (>). كـ مع بناء جملة السمة، يجب أن توجد هذه خاصية ضمن الأعضاء العام المعلن من النوع المحدد. القيمة يجب تعيينه إلى موجود ضمن العنصر. بشكل عام، إعطاء القيمة كعناصر واحد أو أكثر من كائن ، بسبب تحديد الكائنات كما هو قيم السيناريو التي بناء الجملة عنصر يهدف إلى عنوان. وأخيراً، مكافئة إغلاق علامة تحديد نفس elementTypeName . propertyName تركيبة يجب توفير, في المناسبة التداخل وموازنته علامات العناصر الأخرى.

على سبيل المثال، يكون التالي بناء الجملة عنصر ContextMenu من Button.

<Button>
  <Button.ContextMenu>
    <ContextMenu>
      <MenuItem Header="1">First item</MenuItem>
      <MenuItem Header="2">Second item</MenuItem>
    </ContextMenu>
  </Button.ContextMenu>
  Right-click me!</Button>

قيمة داخل يمكن أيضاً منح عنصر كنص الداخلي في الحالات حيث يتم تحديد نوع نوع قيمة مجموعة أساسية مثل String, أو تعداد حيث يتم تحديد اسم. تكون هذه الاستخدامات الثاني الشائع إلى حد ما، beca استخدم كل من هذه الحالات يمكن أيضا استخدم بناء جملة سمة أبسط. سيناريو واحد تعبئة العنصر مع سلسلة من أجل الخصائص غير XAML المحتوى ولكن لا يزال يتم استخدامها من أجل تمثيل النص UI وعناصر مسافة بيضاء معينة مثل linefeeds مطلوبة تظهر في ذلك النص UI. بناء جملة لا يمكن الاحتفاظ linefeeds ولكن يمكن بناء الجملة عنصر الخاصية حتى طالما ميزة الاحتفاظ بحالة مسافة بيضاء الهامة نشط (للحصول على تفاصيل، راجع مسافة فاصلة المعالجة في XAML). سيناريو آخر منح هو حتى س: Uid سمةيمكن تطبيقها على العنصر خاصية ووضع القيمة داخل وبالتالي كما القيمة التي يجب أن يكون مترجما WPF إخراج BAML أو بواسطة أساليب غير ذلك.

عنصر خاصية هو غير ممثلة في شجرة WPF المنطقية. A العنصر بناء جملة معين فقط لإعداد ، وهو ليس عنصر يحتوي على كائن النسخ عليه أو مثيل. (للحصول على تفاصيل حول المفهوم شجرة المنطقية راجع الأشجار فى الWPF.)

خصائص حيث كل سمة و تحتوي بُنى جمل اثنين بشكل عام نفس النتيجة على الرغم من أنه يمكن أن يختلف subtleties مثل معالجة مسافة بيضاء قليلاً بين بُنى جمل أو بناء جملة عنصر معتمدة.

بناء جملة المجموعة

تتطلب مواصفات XAML تطبيقات المعالج XAML تعريف خصائص حيث يكون نوع القيمة عبارة عن مجموعة. تنفيذ معالج XAML عامة في.NET هو تشغيل تعليمات برمجية مُدارة و CLR، والتعرف تشغيل أنواع المجموعات من خلال واحد الإجراءات التالية:

إذا كان النوع عبارة عن مجموعة ثم لا تحتاج نوع المجموعة inferred في العلامات كعنصر كائن. بدلاً من ذلك، يتم تحديد العناصر التي تم تخصيصها تصبح العناصر الموجودة في المجموعة واحد أو أكثر من العناصر التابعة العنصر. يتم تقييم كل عنصر مثل كائن أثناء تحميل إضافة مجموعة بواسطة استدعاء Add أسلوب مجموعة الضمانات. على سبيل المثال، Triggers من Style يأخذ نوع مجموعة متخصصة TriggerCollection ، التي implements IList. ليس من الضروري على إنشاء مثيل TriggerCollection عنصر الكائن في العلامات. بدلاً من ذلك، حدد واحد أو أكثر من Trigger عناصر عناصر بداخل Style.Triggers العناصر، حيث Trigger (أو فئة مشتقة) هو النوع المتوقع كنوع عنصر بشدة مكتوب و الضمني TriggerCollection.

<Style x:Key="SpecialButton" TargetType="{x:Type Button}">
  <Style.Triggers>
    <Trigger Property="Button.IsMouseOver" Value="true">
      <Setter Property = "Background" Value="Red"/>
    </Trigger>
    <Trigger Property="Button.IsPressed" Value="true">
      <Setter Property = "Foreground" Value="Green"/>
    </Trigger>
  </Style.Triggers>
</Style>

خاصية قد يكون كل من نوع مجموعة و خاصية محتوى XAML لهذا النوع ثم اشتقاق أنواع الذي تمت مناقشته في القسم التالي الخاص بهذا الموضوع.

مجموعة ضمني ينشئ عضو في تمثيل الشجرة منطقية على الرغم من أن لا يظهر في العلامات مثل . عادةً الأصل نوع تنفيذ في إنشاء مثيل لمجموعة واحدة من خصائصه ويصبح مجموعة فارغة مبدئياً جزء من شجرة الكائن.

ملاحظةملاحظة

واجهات القائمة والقاموس العام ( IList<T>و IDictionary<TKey, TValue>) غير معتمدة للكشف عن مجموعة.ومع ذلك، يمكنك استخدام الفئة List<T> كفئة أساسية لأن ذلك يقوم بتنفيذ IList مباشرةً، أو Dictionary<TKey, TValue> كفئة أساسية لأن ذلك يقوم بتنفيذ IDictionary مباشرة.

في صفحات ".NET المرجعية" أنواع المجموعات بناء الجملة هذا الإشارة الحذف deliberate عنصر الكائن لمجموعة أحيانًا في المقاطع بناء الجملة XAML كـ "بناء جملة الضمني".

باستثناء لكل عنصر كائن في ملف XAML الذي يتداخل العنصر الجذر، كـ حقا هو عنصر فرع لعنصر آخر عنصر يقع واحد من cكـes التالية أو كليهما: عضو مجموعة الضمني العنصر الأصل الخاصة به أو عنصر أن تحدد قيمة المحتوى XAML للعنصر الأصل (XAML المحتوى سيتم سيتم مناقشتها الخصائص في مقطع قادمة). بمعنى آخر، العلاقة بين العناصر الأصل والعناصر التابعة في صفحة علامات بالفعل كائن مفرد في الجذر ويكون كل عنصر الكائن أسفل الجذر إما مثيل واحد يوفر قيمة الأصل أو أحد العناصر في مجموعة نوع مجموعة أيضاً قيمة الأصل. Th هو مفهوم جذر مفرد هو عادة مع XML، و هو reinforced بشكل متكرر في سلوك نقطة الوصول هو التي تحميل XAML مثل Load.

المثال التالي عبارة عن بناء جملة عنصر كائن مجموعة ( GradientStopCollection) المحدد بشكل صريح.

<LinearGradientBrush>
  <LinearGradientBrush.GradientStops>
    <GradientStopCollection>
      <GradientStop Offset="0.0" Color="Red" />
      <GradientStop Offset="1.0" Color="Blue" />
    </GradientStopCollection>
  </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

لاحظ أن ذلك غير ممكنة دوماً بوضوح تعريف المجموعة. على سبيل المثال، محاولة التصريح TriggerCollection بشكل صريح في المعروض سابقاً Triggers هل المثال الفشل. يتطلب بشكل صريح للتصريح المجموعة التي يجب أن تعتمد الفئة مجموعة افتراضي ، و TriggerCollection لم يكن افتراضي .

خصائص المحتوى XAML

محتوى XAML هو تمكين فقط على فئات لتعيين في ContentPropertyAttribute كجزء من الخاصة بهم تعريف فئة. ContentPropertyAttribute مراجع اسم المحتوى لهذا النوع من عنصر (بما في ذلك الفئات المشتقة). عند معالجة بواسطة معالج XAML سيتم تعيين أية عناصر تابعة أو نص الداخلية التي تم العثور عليها بين فتح علامات إغلاق العنصر الكائن من أن القيمة XAML المحتوى لذلك الكائن. يتم السماح لتحديد صريحة عناصر المحتوى ، ولكن هذا الاستخدام غير معروض بشكل عام في المقاطع XAML بناء الجملة في مرجع .NET. تقنية صريحة/مطوّل قيمة العرضية الوضوح العلامات أو أنها مسألة نمط العلامات ولكن عادةً هدف المحتوى هو لتنظيم العلامات بحيث يمكن أن تتداخل العناصر المرتبطة intuitively كتابع الأصل مباشرة. لا يتم تعيين خاصية علامات العناصر لخصائص غير ذلك تشغيل عنصر ك "محتوي" في تعريف لغة XAML صارمة؛ تتم معالجة سابقا في ترتيب معالجة محلل XAML بكما لا تعتبر إلى أن "المحتوي".

يجب المحتوى XAML القيم القريبة

قيمة خاصية محتوى XAML يجب توفيره إما بشكل كامل قبل أو بالكامل بعد أي عناصر خاصية أخرى في عنصر الكائن هذا. هذا ما إذا كان تحديد قيمة خاصية محتوى XAML كسلسلة أو كـ كائن واحد أو أكثر. على سبيل المثال، ما يلي ترميز لم تحليل:

<Button>I am a 
  <Button.Background>Blue</Button.Background>
  blue button</Button>

Th هو هو غير مسموح به بشكل أساسي لأن إذا th هو بناء جملة أجريت صريح باستخدام بناء الجملة للعنصر الخاصية للخاصية المحتوى، ثم قد يتم تعيين خاصية "المحتوى" مرتين:

<Button>
  <Button.Content>I am a </Button.Content>
  <Button.Background>Blue</Button.Background>
  <Button.Content> blue button</Button.Content>
</Button>

مثال غير قانونية وبنفس هو إذا الخاصية المحتوى مجموعة ثم يتم interspersed العناصر التابعة عناصر الخاصية:

<StackPanel>
  <Button>This example</Button>
  <StackPanel.Resources>
    <SolidColorBrush x:Key="BlueBrush" Color="Blue"/>
  </StackPanel.Resources>
  <Button>... is illegal XAML</Button>
</StackPanel>

حصائص المحتوى و بناء جملة المجموعة المدمج

لكي تتمكن من قبول أكثر من واحدة كائن العنصر كما المحتوى نوع المحتوى يجب أن يكون نوع مجموعة بشكل خاص. تشبه بناء الجملة عنصر أنواع المجموعات, يجب أن تتعرف معالج XAML أنواع أنواع المجموعات. إذا كان عنصر محتوى XAML و نوع المحتوى XAML عبارة عن مجموعة ثم نوع المجموعة الضمانات لا تحتاج إلى تحديد في العلامات عنصر كائن أو XAML المحتوى لا تحتاج إلى تحديد أنه العنصر. لذلك تظهر طراز المحتوى في العلامات الآن أن أكثر تعيين كأحد المحتوى. يكون التالي بناء الجملة المحتوى Panel اشتقاق . كافة Panel الفئات المشتقة تأسيس المحتوى XAML أن Children الذي يتطلب قيمة من النوع UIElementCollection.

<Page
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  >
  <StackPanel>
    <Button>Button 1</Button>
    <Button>Button 2</Button>
    <Button>Button 3</Button>
  </StackPanel>
</Page>

لاحظ أنه غير عنصر Children ولا العنصر UIElementCollection مطلوبة في العلامات. هذا إحدى ميزات تصميم XAML بحيث بشكل متكرر تضمين العناصر التي تعرّف واجهة المستخدم أكثر intuitively represented مثل شجرة عناصر متداخلة مع علاقات العنصر الأصل - التابع الفوري ، بدون intervening علامات العناصر أو مجموعة الكائنات. في الحقيقة UIElementCollection لا يمكن تحديد بشكل صريح في العلامات ككائن ، حسب التصميم. لأن به المنتظر فقط كـ مجموعة ضمني UIElementCollection أدى لا expose منشئ افتراضي عام و وبالتالي يتعذر إنشاء مثيل ككائن .

خلط عناصر خاصية "و" كائن العناصر الموجودة في أحد كائنات خصائص محتوى

مواصفات XAML بتعريف أن معالج XAML يمكن فرض تلك العناصر الكائن التي يتم استخدامها لتعبئة المحتوى XAML ضمن كائن العنصر يجب أن تكون قريبة ثم يجب أن لا تكون مختلطة. Th هو قيود ضد خلط عناصر خاصية والمحتويات هو فرض قبل WPFXAML المعالجات.

يمكن أن يكون كائن تابع مثل العلامات الفوري الأول ضمن كائن . ثم يمكن تقديم عناصر. أو يمكنك تحديد واحد أو أكثر عناصر ثم المحتوى ثم أكثر عناصر. ولكن مرة واحدة يلي عنصر محتوى لا يمكن تقديم المحتوى من ذلك, يمكنك فقط إضافة عناصر.

هذا المحتوى / متطلبات ترتيب العنصر لا ينطبق النص الداخلي المستخدم كمحتوى. ومع ذلك، ما زال نمط علامات جيدة للاحتفاظ النص الداخلي المتجاورة, لأنه سيكون مسافة بيضاء الهامة صعوبة في الكشف عن بشكل مرئي في العلامة إذا يتم interspersed عناصر مع النص الداخلي.

مساحة أسماء XAML،

بلا أمثلة بناء الجملة السابق المحدد على XAML غير الافتراضي XAML . في نموذجية WPFالتطبيقات، مساحة الاسم الافتراضية XAML هو المحدد ليكون WPFمساحة الاسم. يمكنك تعيين مساحات الأسماء XAML غير ذلك من مساحة أسماء المصادر XAML الافتراضية وما زال استخدام بناء جملة مماثل. ثم، في أي مكان الموقع فئة ما عدا هو المسماة التي هو ويمكن الوصول إليه ليس داخل مساحة الاسم الافتراضية XAML، اسم الفئة التي يجب أن يسبق مع بادئة مساحة الاسم XAML كما تم تعيينها إلى مساحة الاسم CLR المطابق. على سبيل المثال، <custom:Example/>هو بناء الجملة "العنصر" إنشاء مثيل لكائن Exampleالفئة، الموقع تم مسبقاً تعيين مساحة الاسم CLR التي تحتوي على تلك الفئة (ومن الممكن أن تكون المعلومات خارجي تجميع الذي يحتوي على أنواع النسخ) إلى customالبادئة.

لمزيد من المعلومات حول XAM، راجع مساحات الاسم XAML وتعيين مساحة الاسم ل XAML WPF

ملحقات العلامات

يعرّف XAML ملحق علامات البرمجة الوحدة التي تمكّن هروب من معالجة المعالج XAML العادي سلسلة قيم أو كائن عناصر و ينتظره المعالجة إلى فئة نسخ. الحرف الذي يعرّف ملحق علامات إلى معالج XAML عند استخدام بناء الجملة هو فتح متعرج ({}) ، متبوعاً أي حرف آخر غير الأقواس متعرجة إغلاق (}). يجب أن تشير السلسلة الأولى التالية متعرج فتح فئة يوفر معينة سلوك حيث قد يسقط بعض المرجع السلسلة الفرعية "" إذا كانت السلسلة الفرعية ذلك جزءًا من اسم الفئة صحيحاً. بعد ذلك، قد تظهر مسافة واحدة ويُستخدم ثم كل حرف التالية كإدخال بواسطة تطبيق الملحق حتى مصادفة متعرج الإغلاق.

يستخدم تطبيق.NET XAML MarkupExtensionفئة مجردة كأساس لكافة الملحقات ترميز المعتمدة من قبل WPFكذلك غير ذلك الإطارات أو تقنيات. الملحقات ترميز ذلك WPFimplements خصيصا غالباً مصممة لتوفير وسيلة ل مرجع الكائنات الأخرى موجود، أو إجراء مؤجل مرجع s على الكائنات التي سيتم التقييم في وقت التشغيل. على سبيل المثال، بسيطة WPF ربط بيانات هو accomplهوhed بواسطة تحديد {Binding}ملحق ترميز بدلاً من القيمة التي هي خاصية معينة عادة تأخذ. العديد من ملحقات ترميز WPF تمكين جملة سمة ل خصائص الموقع جملة سمة وإلا لن المحتملة. على سبيل المثال، على Styleهو نوع معقد نسبيا الذي يحتوي على سلسلة متداخلة من الكائنات و الخصائص. عادة ما يتم تعريف الأنماط في WPF كـ مورد في ResourceDictionary، وثم الرجوع إليها من خلال واحد الملحقات WPF اثنين للعلامات التي تطلب مورد. ملحق العلامات ينتظره تقييم قيمة الخاصية إلى بحث مورد ويقوم بتمكين توفير القيمة Style الخاصية أخذ نوع Style, في بناء الجملة كما هو موضح في المثال التالي:

<Button Style="{StaticResource MyStyle}">My button</Button>

هنا ، StaticResource يعرّف StaticResourceExtension توفير الفئة ملحق تطبيق. سلسلة أخرى MyStyleهو تستخدم كالإدخال الافتراضي-غير StaticResourceExtensionالمنشئ، الموقع تعريف معلمة كما أخذ من سلسلة الملحق المطلوب ResourceKey. MyStyleمن المتوقع أن يكونس: المفتاح القيمة Styleتعريفها كمورد. ملحق علامات StaticResource استخدام طلب أن يتم استخدام المورد لتوفير Style قيمة خلال منطق البحث مورد ثابت عند وقت التحميل.

و لمزيد من المعلومات حول أساليب العلامات الموسعة ، راجع ملحقات ترميز و XAML WPF. لمرجع ترميز ملحقات وميزات البرمجة XAML غير ذلك ممكنة في تطبيق.NET XAML عامة، راجع مساحة الاسم XAML (x:) ميزات اللغة. لملحقات ترميز الخاصة WPF، راجع ملحقات XAML WPF.

الخصائص المرفقة

إن الخصائص المرفقة مفهوم برمجة المقدمة في XAML فيه يمكن امتلاكه خصائص وإعادة تعريفها بواسطة نوع معين ولكن تعيين كسمات أو العناصر على أي عنصر. سيناريو أساسي أن المرفق خصائص مخصصة تمكين العناصر التابعة في علامات إلى معلومات تقرير إلى عنصر أصل دون الحاجة إلى طراز كائن مشتركة بشكل مكثف عبر كافة العناصر. وعلى العكس من ذلك، يمكن استخدام الخصائص المرفقة بواسطة عناصر الأصل التقرير معلومات عناصر تابعة. للحصول على مزيد من المعلومات حول غرض خصائص المرفقة وكيفية إنشاء خصائص المرفقة الخاصة بك, راجع نظرة عامة حول الخصائص المرفقة.

خصائص المرفقة استخدم بناء جملة مشابهة الخاصية superficially في بناء جملة في ذلك أيضاً تحديد typeName . propertyNameخليط . هناك ثلاثة اختلافات هامة:

  • يمكنك استخدام typeName . propertyName تركيبة حتى عند تعيين خاصية مرفقة خلال بناء الجملة. خصائص المرفقة الحالة فقط حيث مؤهلة اسم الخاصية أحد متطلبات في بناء الجملة.

  • يمكنك أيضاً استخدام بناء الجملة عنصر الخصائص المرفقة. ومع ذلك، بالنسبة النموذجية بناء جملة "عنصر typeName الذي تحدده هو عنصر الكائن الذي يحتوي على العنصر. يتم الإشارة إلى المرفقة ، ثم typeName هي فئة تعريف على المرفق ، العنصر كائن يحتوي على لا.

الأحداث المرفقة

يتم الأحداث المرفقة آخر المفهوم برمجة المقدمة في XAML حيث يمكن تعريف الأحداث بواسطة نوع معين ولكن قد يتم إرفاق معالجات على أي كائن . في تطبيق WOF غالباً نوع يحدد حدث مرفقة نوع ثابت يحدد خدمة ويتم أحيانًا كشف هذه الأحداث المرفقة بواسطة الاسم مستعار أحداث موجهة في أنواع التي تكشف الخدمة. معالجات أحداث المرفق المحدد من خلال بناء الجملة. كما توسيع الأحداث المرفقة بناء جملة السمة لأحداث المرفقة للسماح typeName . eventName استخدام حيث typeName هي فئة يوفر Add و Remove accessors معالج الحدث البنية الأساسية الحدث المرفق, و eventName هو اسم الحدث.

anatomy من XAML العنصر الجذر

يعرض الجدول التالي نموذجية XAML عنصر جذر مقسمة، تظهر السمات محددة للعنصر الجذر:

<Page

فتح الكائن الجذر

xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"

الإعداد الافتراضي ( WPF) مساحة الاسم XAML

xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"

مساحة الاسم XAML لغة XAML

x:Class="ExampleNamespace.ExampleCode"

إعلان فئة جزئي تربط بين ترميز إلى أي الخلف تعليمات برمجية بإعلانها للفئة الجزئي

>

الانتهاء من كائن عنصر للجذر. كائن هو غير مغلق حتى الآن لأن العنصر الذي يحتوي على العناصر التابعة

الاستخدامات XAML اختياري و Nonrecommended

تصف المقاطع التالية استخدامات XAML التي يتم دعمها بمعالجات XAML تقنيا، ولكن التي تنتج اطناب أو غير ذلك aesthetic المشكلات التي تتداخل مع ملفات XAML المتبقية يمكن قراءته بالعين عند تطوير التطبيقات التي تحتوي على المصادر XAML.

اختياري عنصر الاستخدامات

اختياري تتضمن الاستخدامات العنصر بشكل صريح كتابة خارج عنصر المحتوى خصائص المعالج XAML يعتبرها الضمني. على سبيل المثال، عندما تقوم بتعريف المحتويات Menu ، قد تختار بشكل صريح التصريح Items مجموعة من Menu كـ <Menu.Items> علامة عنصر ثم مكان كل MenuItem داخل <Menu.Items> ، بدلاً من استخدام السلوك المعالج XAML الضمني التي كافة العناصر التابعة من Menu يجب أن يكون MenuItem وضع في Items مجموعة. أحياناً يمكن أن تساعد الاستخدامات اختياري توضيح بنية الكائن بشكل مرئي كما في العلامات. أو في بعض الأحيان يمكن تجنب استخدام عنصر خاصية صريحة العلامات يعمل تقنيًا ولكن بشكل مرئي أنها ، مثل ملحقات العلامات المتداخلة داخل قيمة.

سمات typeName.memberName كامل مؤهل

typeName . نموذج memberName من لسمة فعلا يعمل عالمياً المزيد حالة الأحداث الموجهة فقط. ولكن في حالات غير ذلك التي تشكل هو superfluous ويجب تجنب ذلك، إذا لم يكن فقط لأسباب تتعلق بنمط ترميز وقابلية القراءة. في المثال التالي كل من الثلاثة مراجع إلى Background متكافئة بشكل كامل:

<Button Background="Blue">Background</Button>
<Button Button.Background="Blue">Button.Background</Button>
<Button Control.Background="Blue">Control.Background</Button>

Button.Backgroundلأن البحث مؤهل لهذه خاصية تشغيلButtonهو الناجحة ( Backgroundتم توارث من التحكم) وButtonهو الفئة الخاصة بالعنصر الكائن أو class. أساسية Control.Background works because the Control class actually defines Background and Control is a Button base class.

ومع ذلك، التالية typeName . memberName مثال لا تعمل ويتم وبالتالي يتم إظهار التعليقات:

<!--<Button Label.Background="Blue">Does not work</Button> -->

Label آخر فئة مشتقة منControl ، وإذا كان تحديدLabel.Background داخلLabel الكائن ، هل قد عملت هذا الاستخدام. على الرغم من ذلك، لأن Labelهو ليس فئة أو فئة أساسية من Button، تعيين سلوك المعالج XAML هو ثم معالجة Label.Backgroundكالخصائص المرفقة. Label.Backgroundهو المرفق لا توفر خاصية، وترتيب هو الاستخدام لكنه فشل.

baseTypeName.memberName عناصر

بطريقة تماثل إلى كيفية typeName . memberName يعمل بناء جملة السمة baseTypeName النموذج. memberNameيعمل في بناء الجملة بناء الجملة العنصر. على سبيل المثال، يعمل بناء الجملة التالي:

<Button>Control.Background PE
  <Control.Background>
    <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
      <GradientStop Color="Yellow" Offset="0.0" />
      <GradientStop Color="LimeGreen" Offset="1.0" />
    </LinearGradientBrush>
    </Control.Background>
</Button>

يتم تحديد عنصر خاصية هنا كـ Control.Background حتى ولو كانت تتضمنها عنصر خاصية Button.

ولكن مثل typeName . memberName نموذج سمات baseTypeName . memberName نمط رديئة في العلامات ويتم يجب تجنب.

راجع أيضًا:

المبادئ

نظرة عامة على XAML (WPF)

نظرة عامة حول خصائص التبعية

TypeConverters و XAML

XAML وفئات مخصصة ل WPF

موارد أخرى

مساحة الاسم XAML (x:) ميزات اللغة

ملحقات XAML WPF