الخاصية التبعية بيانات التعريف

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

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

  • المتطلبات الأساسية
  • كيفية استخدام خصائص التبعية ببيانات التعريف
  • بيانات تعريف APIs
  • متى يتم تجاوز بيانات التعريف، متى يتم اشتقاق فئة
  • سيناريو لتغيير بيانات التعريف الموجودة
  • موضوعات ذات صلة

المتطلبات الأساسية

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

كيفية استخدام خصائص التبعية ببيانات التعريف

خصائص التبعية ببيانات التعريف موجودة ككائن يمكن الاستعلام عنه لفحص ‏‫الصفات المميزة لخصائص التبعية. بيانات التعريف هذه أيضاً يتم الوصول لها بشكل متكرر كما تعالج أي خاصية تبعية معطاة. كائن بيانات التعريف لخصائص التبعية يمكن أن تحتوي على أنواع المعلومات التالية:

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

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

  • إذا كانت خاصية التبعية تعتبر مستوى إطار عمل WPF الخاصية, قد تحتوي بيانات التعريف على مستوى إطار عمل WPF صفات خاصية التبعية، الذي يعلن عن معلومات و حالة خدمات مثل مستوى إطار عمل WPF تخطيط مشغّل و منطق خاصية التوريث. للحصول على مزيد من المعلومات حول خاصية التبعية لبيانات التعريف، راجع بيانات التعريف خاصية إطار العمل.

بيانات تعريف APIs

النوع الذي يقرر معظم معلومات بيانات التعريف المستخدم من قبل نظام خاصية فئة PropertyMetadata . يتم بشكل اختياري تحديد مثيلات بيانات التعريف عند تسجيل خصائص تبعية لنظام الخاصية و يمكن أن يتم تعيينه مرة أخرى لأنواع إضافية إما إضافة أنفسهم مالكي أو تجاوز بيانات التعريف التي ترث تعريف خاصية تبعية الفئة الأساسية. (للحالات حيث لا يحدد تسجيل خاصية بيانات التعريف, PropertyMetadataافتراضي يتم إنشاءه بقيم افتراضية لتلك الفئة.)يتم إرجاع بيانات التعريف المسجلة بالشكل PropertyMetadata عند استدعاء متعددة GetMetadata تساعد التحميلات الزائدة للحصول على بيانات التعريف من خاصية التبعية للمثيل DependencyObject.

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

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

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

متى يتم تجاوز بيانات التعريف، متى يتم اشتقاق فئة

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

إذا كان السيناريو الذي تحاول تمكينه لخاصية التبعية على نوع لا يمكن إنجازه عن طريق تعديل خصائص التبعية الموجودة, ربما ثم يكون ضروري إنشاء فئة مشتقة ثم لتعريف خاصية تبعية مخصصة في فئة مشتقة. خاصية التبعية المخصصة تماثل سلوك خصائص التبعية المعرّفة من قِبل WPF واجهات API. للحصول على مزيد من التفاصيل حول خصائص التبعية, راجع خصائص التبعية المخصصة.

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

سيناريو لتغيير بيانات التعريف الموجودة

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

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

تجاوز بيانات التعريف

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

خاصية بيانات التعريف يمكن أن يتم توفيرها لخاصية التبعية أثناء استدعاء التسجيل ( Register). ومع ذلك، في كثير من الحالات، قد تحتاج إلى توفير نوع محدد لبيانات التعريف للفئة الخاصة بك عندما ترث خاصية التبعية هذه. يمكنك القيام بذلك عن طريق استدعاء أسلوب OverrideMetadata. للحصول على مثال منWPF واجهات API, the FrameworkElement ، الفئة هي النوع الذي يقوم بتسجيل أولاً Focusableخاصية التبعية. و لكن Control فئة تتجاوز بيانات التعريف لخاصية التبعية لتوفير قيمة افتراضية أولي خاصة به, تغييرها من false إلى true ، و وإلا يعيد استخدام التنفيذ الأصلي Focusable.

عندما تقوم بتجاوز بيانات التعريف, صفات بيانات التعريف المختلفة المميزة هي إما تم دمجها أو استبدالها.

  • PropertyChangedCallback مدمج. إذا قمت بإضافة جديد PropertyChangedCallback, يتم تخزين رد الاتصال هذا في بيانات التعريف. إذا لم تحدد PropertyChangedCallback في التجاوز, قيمة PropertyChangedCallback تعامل كمرجع من أقرب عنصر أصل المعين في بيانات التعريف.

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

  • DefaultValueيُستبدل. إذا لم تحدد PropertyChangedCallback في التجاوز, قيمة DefaultValue تأتي من أقرب عنصر أصل معين في بيانات التعريف.

  • CoerceValueCallback يتم استبدال التطبيقات. إذا قمت بإضافة جديد CoerceValueCallback, يتم تخزين رد الاتصال هذا في بيانات التعريف. إذا لم تحدد CoerceValueCallback في التجاوز, قيمة CoerceValueCallback تعامل كمرجع من أقرب عنصر أصل المعين في بيانات التعريف.

  • سلوك نظام الخاصية هو أن فقط CoerceValueCallback يتم استدعاء بيانات التعريف الفورية. لا يوجد أية مراجع CoerceValueCallback لتطبيقات أخرى في التسلسل الهرمي.

يتم تطبيق هذا السلوك بواسطة Merge ، ويمكن تجاوزها على فئات بيانات التعريف المشتقة.

تجاوز خصائص بيانات التعريف المرفقة

في WPF ، الخصائص المرفقة يتم تنفيذها كخصائص تبعية. وهذا يعني أن لديهم أيضاً بيانات التعريف, التي يمكنها تجاوز الفئات الفردية. اعتبارات ‏‫النطاق الخاصة للخاصية المرفقة في WPF يتم بشكل عام التي أي DependencyObject يمكن أن تحتوي على مجموعة خصائص مرفقة عليهم. لذلك، أي DependencyObject يمكن لأي فئة مشتقة تجاوز بيانات التعريف لأي خاصية مرفقة، كما قد يتم تعيينها على مثيل فئة. يمكنك تجاوز القيم الافتراضية أو عمليات الاسترجاعات أو مستوى إطار عمل WPF . إذا كانت الخاصية المرفقة تم تعيينها على مثيل فئة, تطبق خصائص تجاوز بيانات التعريف هذه. على سبيل المثال، يمكنك تجاوز القيمة الافتراضية, بحيث يتم الإعلام عن قيمة التجاوز على أنها قيمة الخاصية المرفقة على مثيلات الفئة الخاص بك, كلما لم يتم تعيين الخاصية خلاف ذلك.

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

Inherits غير مناسبة للخصائص المرفقة.

إضافة فئة على أنها مالك لخاصية تبعية موجودة

يمكن لفئة إضافة نفسها كمالك لخاصية تبعية التي تم بالفعل تسجيلها ، باستخدام أسلوب AddOwner. وهذا يمكّن الفئة من استخدام خاصية تبعية التي تم تسجيلها أصلا لنوع مختلف. الفئة المضافة عادةً غير الفئة المشتقة من نوع تم تسجيله أولاً لخاصية التبعية كمالك. بشكل فعال ,هذا يسمح للفئة الخاصة بك و الفئات المشتقة منها "توريث" تطبيق خاصية التبعية بدون فئة المالك الأصلي أو الفئة المضافة في نفس الفئة الصحيحة للتسلسل الهرمي. إضافة، الفئة المضافة(و الفئات المشتقة أيضاً) يمكنها توفير نوع خاص لبيانات التعريف لخاصية التبعية الأصلي.

بالإضافة إلى إضافة نفسك كمالك خلال أساليب نظام الأداة المساعدة، يجب على الفئة المضافة التصريح بأعضاء عامة إضافية على نفسه لجعل خاصية التبعيةمشارك كامل في نظام الخاصية مع التعرض إلى الرمز و العلامات. الفئة التي تضيف خاصية تبعية موجودة لها نفس المسؤوليات كعرض طراز الكائن لخاصية تبعية هذه كما تفعل الفئة التي تقوم بتعريف خاصية تبعية مخصصة جديدة. أول عضو للعرض هو حقل معرف لخاصية التبعية. يجب أن يكون هذا الحقل public static readonly حقل من نوع DependencyProperty ، والذي يتم تعيينه إلى قيمة إرجاع AddOwner المكالمة. العضو الثاني للتعريف وقت تشغيل اللغة العامة (CLR)خاصية "المجمّع" . برنامج التضمين يسهل معالجة خاصية التبعية الخاصة بك في التعليمات البرمجية (تجنب استدعاءات SetValue كل مرة, ثم يمكن إجراء المكالمة مرة واحدة فقط في برنامج التضمين نفسه). يتم تطبيق برنامج التضمين حتى يتماثل إلى كيفية تطبيقه إذا تم تسجيل خاصية التبعية . للحصول على مزيد من المعلومات حول تطبيق خاصية تبعية , راجع خصائص التبعية المخصصة و كيفية القيام بما يلي: إضافة نوع مالك إلى خاصية تبعية.

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

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

راجع أيضًا:

المرجع

PropertyMetadata

DependencyObject

DependencyProperty

GetMetadata

المبادئ

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

بيانات التعريف خاصية إطار العمل