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

Extensible Application Markup Language (XAML)كما في.NET يعتمد القدرة على إلى تعريف فئة cusإلىm أو بنية في أيوقت تشغيل اللغة العامة (CLR)اللغة، ثم الوصول والتي لفئة استخدامXAMLترميز. يمكنك باستخدام خليط من Windows Presentation Foundation (WPF)-تعريف أنواع و أنواع مخصصة داخل نفس الملف ترميز، عادة بواسطة تعيين أنواع مخصصة إلى بادئة مساحة الاسم XAML. يناقش هذا الموضوع المتطلبات التي يجب أن تحققها فئة مخصصة لتكون قابلة للاستخدام كـعنصر XAML .

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

  • فئات مخصصة في تطبيقات أو Assemblies
  • متطلبات لفئة مخصصة مثل عنصر XAML
  • متطلبات خصائص فئة مخصصة كـ سمات XAML
  • متطلبات XAML معالج الأحداث بناء جملة السمة على أحداث فئة مخصصة
  • خصائص الكتابة المجمعة
  • تصريح محتوى خصائص XAML
  • إجراء تسلسل XAML
  • موضوعات ذات صلة

فئات مخصصة في تطبيقات أو Assemblies

الفئات الخاصة التي يتم استخدامها في XAML يمكن تعريفها بطريقتين مختلفتين: ضمن خلفية التعليمات البرمجية أو التعليمات البرمجية الأخرى التي ينتج عنها التطبيق الأساسي Windows Presentation Foundation (WPF) ، أو كـفئة في تجميع منفصل مثل قابل للتنفيذ أو DLL مستخدمة كمكتبة الفئات. لدى كل من هذه الطرق مزايا وعيوب معينة.

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

  • الفائدة التي تنتج عن تعريف الفئات المخصصة في تطبيق هو ذلك th هو التقنية هو خفيفة نسبيا وتوزيع واختبار هو sues تمت مصادفة عندما تقوم بتقديم تجميعات منفصلة خارج تطبيق الأساسي القابل للتنفيذ. ومع ذلك، dهوadvantage أهمية واحد هو أنه لا يمكنك استخدام الفئات المعرفة في نفس تجميع كعنصر جذر آخر XAMLالصفحات في هذا تطبيق.

  • ما إذا كان معرفة في نفس التجميع أو آخر، الفئات الخاصة بحاجة ليتم تعيينها بين مساحة الإسم CLR و مساحة الإسم XML حتى يمكن استخدامها في XAML كعناصر. انظر مساحات الاسم XAML وتعيين مساحة الاسم ل XAML WPF

متطلبات لفئة مخصصة مثل عنصر XAML

حتى تتمكن من إنشاء مثيل كـعنصر كائن ، يجب أن تفي الفئة المتطلبات التالية:

  • الفئة المخصصة يجب أن تكون عامة و تدعم منشئ عام افتراضي (بدون معلمات). (راجع بعد مقطع للملاحظات المتعلقة بالبنى).

  • يجب أن تكون الفئة المخصصة الخاصة بك فئة متداخلة. clكـses متداخلة و "نقطه" في بناء بها CLR استخدام جملة عام تتداخل مع الأخرى WPFو/او XAML ميزات مثل كـ إرفاق الخصائص.

بالإضافة إلى تمكين بناء عنصر الكائن، يمكن تعريف الكائن الخاص بك أيضا بناء عنصر خاصية لأية خصائص غير ذلك عامة الحصول على ذلك الكائن كـ نوع القيمة. هذا لأن الكائن يمكنه الآن إنشاءه كعنصر كائن و يمكن تعبئة قيمة عنصر الخاصية إلي خاصية.

البنيات

البيانات التي تم تعريفها كأنواع خاصة قادرة دوماً على إنشاء في XAML في WPFهذا لأن الترجمون CLRينشئون ضمنيًا منشئ افتراضي لالبنية التي تهيئة كافة قيم الخصائص إلى القيم الافتراضية الخاصة بهم. في بعض الحالات، سلوك البناء الافتراضي و/أو عنصر الكائن المستخدم للبنية يكون غير مرغوب فيه. قد يرجع ذلك لأن البنية المقصودة لتعبئة قيم والدالة بمفهوم الوحدة ،حيث أن القيم الموجودة يمكن أن يكون لديها تفسيرات تبادلية خاصة و وبالتالي لا من خصائصه are settable.. ال WPF مثال لبنية هو GridLength. بشكل عام، يجب تطبيق مثل بنية s محوّل نوع بحيث يمكن التعبير عن قيم الموجودة في النموذج السمة، باستخدام اصطلاحات سلسلة إنشاء interpretations مختلفة أو أوضاع قيم بنية's. يجب أيضا كشف المشابهة لإنشاء تعليمات برمجية من خلال غير افتراضي على البنية الدالة الإنشائية.

متطلبات خصائص فئة مخصصة كـ سمات XAML

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

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

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

ممكّن TypeConverter سمة بناء الجملة

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

<Button>Hallo!
  <Button.Language>
    de-DE
  </Button.Language>
</Button>
<Button Language="de-DE">Hallo!</Button>

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

محولات نوع لكل-خاصية

بدلاً من ذلك، الخاصية نفسها قد تقوم بتعريف محول نوع في مستوى الخاصية. هذا يمكّن "مصغر لغة"من إنشاء كائنات من نوع الخاصية المضمنة، بواسطة معالجة قيم سلسلة واردة للسمة كإدخال ل ConvertFromالعملية التي تعتمد على النوع المناسب. عادةً ما يتم هذا لتوفيرconvenience accessor و not as the sole means لتمكين إعداد خاصية في XAML. ومع ذلك، من الممكن أيضاً استخدام محولات نوع للسمات حيث تريد استخدام الانواع الموجودة CLR التي لم توفر إما منشئ افتراضي أو محول نوع للسمة. أمثلة من ال WPF واجهات APIهي خصائص معينة التي تتخذ النوع CultureInfo في هذه الحالة،WPF استخدام النوع الموجودMicrosoft NET Framewor. CultureInfoلمواجهة سيناريوهات التوافق والترحيل التي تم استخدامها في الإصدارات السابقة من الإطارات بشكل أفضل، ولكن النوعCultureInfo لا يدعم نوع المُنشئات الضرورية أو نوع مستوى-نوع التحويل إلى يكون قابل للاستخدام كقيمة مباشرة لخاصية XAML

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

كتابة و Attributing محول نوع

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

متطلبات XAML معالج الأحداث بناء جملة السمة على أحداث فئة مخصصة

تكون قابلة للاستخدام كـحدث CLR ، يجب أن يكون كشف الحدث كحدث عامة على فئة تدعم منشئ افتراضي, أو على فئة مجردة حيث يمكن الوصول إلى الحدث على الفئات المشتقة. لكي تتمكن من استخدام بصورة مناسبة مثل توجيه الأحداث ، الخاص بك CLR يجب تنفيذ الحدث صراحةً add و أساليبremove ، التي هي معالجات أضافة وإزالة لـتوقيع الحدث CLR وإعادة توجيه تلك المعالجات إلى أساليب AddHandler و RemoveHandler . هذه الطرق معالجات إضافة أو إزالة إلى مخزن معالج الأحداث الموجهة في المثيل الذي يتصل بها الحدث.

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

من الممكن تسجيل معالجات مباشرة لأحداث موجهة باستخدام AddHandler ، و عن عمد لم يتم تعريف الحدث CLR الذي يعرض حدث موجه .Th هو هو عادة غير مستحسن لأن حدث لن يقوم بتمكين XAMLستقدم بناء جملة السمة إرفاق معالجات، وفئة الناتج أقل شفافة XAMLعرضاً لقدرات هذا النوع.

خصائص الكتابة المجمعة

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

  • لا يحتاج الكائن الذي هو كائن مجموعة أن يحدد في بناء جملة عنصر الكائن. وجود نوع المجموعة ضمني كلما قمت بتحديد خاصية في XAML التي تأخذ نوع مجموعة.

  • العناصر التابعة مجموعة معالجة خاصية في العلامة إلى أن تصبح الأعضاء مجموعة. عادة، وصول تعليمات برمجية لأعضاء مجموعة هو تنفيذها من خلال وظائف lهوt/dictionary مثل Add، أو من خلال عنصر مفهرس. ولكن بناء الجملة XAML لا يدعم الأساليب أو مفهرسات. المجموعات هي بوضوح متطلبات شائعة جداً من أجل إنشاء شجرة عناصر، وتحتاج بطريقة ما ملء هذه المجموعات في التعريف XAML. لذلك، العناصر التابعة لمجموعة الخاصية تتم معالجتها بواسطة إضافتها إلى المجموعة التي هي قيمة نوع خاصية المجموعة.

.NET XAMLالتنفيذ وبالتالي المعالج XAML WPF يستخدم التعريف التالي ما يؤسس مجموعة الخاصية. نوع الخاصية للخاصية يجب أن ينفذ بإحدى الطرق التالية:

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

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

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

عند التصريح بخاصية التي تأخذ مجموعة ، توخى الحذر عند ذلك كيفية تهيئة قيمة الخاصية في مثيلات جديدة من النوع. إذا لم يتم تطبيق الخاصية كـ خاصية تبعية ، ثم يجد استخدام الخاصية حقل نسخ الذي يستدعي مجموعة مُنشئ النوع كافية. إذا كان لديك خاصية خاصية تبعية ثم قد تحتاج إلى تهيئة مجموعة الخاصية كجزء من منشئ النوع الافتراضي. This هو because a تبعية خاصية takes its قيمة افتراضية من بيانات التعريف, و you typically do not want the القيمة الإفتراضية of a مجموعة خاصية إلى be a ثابت, shared مجموعة. There should be a مجموعة مثيل per each containing نوع مثيل. لمزيد من المعلومات، راجع خصائص التبعية المخصصة.

يمكن تطبيق نوع مجموعة مخصصة لمجموعة الخاصية الخاصة بك. وبسبب معالجة مجموعة الخاصية الضمني، نوع المجموعة المخصصة لا تحتاج إلى توفير منشئ افتراضي لكي يتم استخدامها في XAML ضمنياً. ومع ذلك، يمكنك اختيارياً توفير منشئ افتراضي لنوع المجموعة. This can be a worthwhile practice. Unless you do provide a الافتراضي الدالة الإنشائية, you cannot بوضوح declare the مجموعة كـ an كائن عنصر. قد يفضل الكُتّاب بعض العلامات لمشاهدة مجموعة واضحة على سبيل نمط العلامات. أيضاً،يمكن على منشئ افتراضي تبسيط متطلبات التهيئة عند إنشاء الكائنات الجديدة التي تستخدم نوع المجموعة الخاصة بك مثل قيمة الخاصية.

تصريح محتوى خصائص XAML

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

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

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

إجراء تسلسل XAML

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

راجع أيضًا:

المبادئ

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

خصائص التبعية المخصصة

نظرة عامة على تأليف التحكم

نظرة عامة حول العناصر الأساسية

خصائص تحميل و تبعية XAML