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

يصف هذا الموضوع الأسباب التي Windows Presentation Foundation (WPF) لمطوري التطبيقات وكتّاب المكون قد يحتاجوا إلى إنشاء مخصص خاصية تابعية
 ، كما توضح خطوات التطبيق بالإضافة إلى بعض خيارات التطبيق التي تحسن الأداء, الاستخدام أو براعة الخاصية.

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

  • المتطلبات الأساسية
  • ما هي محتويات خاصية تبعية؟
  • أمثلة خصائص التبعية
  • متى يجب أن تنفذ خاصية تبعية؟
  • قائمة اختيار تعريف خاصية التبعية
  • خصائص للقراءة فقط التبعية
  • خصائص تبعية مجموعة حسب النوع
  • اعتبارات الأمان لخاصية التبعية
  • خصائص تبعية و مُنشئات الفئة
  • موضوعات ذات صلة

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

يفترض هذا الموضوع أنك تفهم خصائص التبعية من منظور المستهلك لخصائص التبعية الموجودة فى الفئاتWPF
, و أنك قمت بقراءة الموضوع نظرة عامة حول خصائص التبعية. لمتابعة الأمثلة في هذا الموضوع يجب أيضاً فهم Extensible Application Markup Language (XAML) و معرفة كيفية كتابة تطبيقات WPF .

ما هي محتويات خاصية تبعية؟

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

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

أمثلة خصائص التبعية المطبّقة على الفئاتWPF تتضمن الخاصية Background،
و الخاصيةWidth و الخاصية 
Text، بين العديد من الآخرين. كل خاصية تبعية معروضة لفئة لديها حقل ثابت عمومي مناظرمن نوع DependencyProperty معروض لنفس الفئة. هذا هو معرّف خاصية . المعرف سمى باستخدام اتفاقية: اسم خاصية التبعية مع السلسلة Property الملحقة به. على سبيل المثال،الحقل المعرف المقابلDependencyPropertyللخاصية Background هو
 BackgroundProperty. المعرف يخزن معلومات حول خاصية التبعيةكما تم تسجيلها, ثم يُستَخدم المعرّف لاحقاً لعمليات أخرى تتضمن خاصية التبعية ، مثل استدعاء SetValue.

كما ذكر في نظرة عامة حول خصائص التبعية ،كافة خصائص التبعية في WPF (باستثناء معظم الخصائص المرفقة ) هي أيضاً خصائص CLR لوجود تطبيق "المجمّع". لذلك، من التعليمات البرمجية "، يمكنك الحصول على أو تعيين خصائص تبعية عن طريق استدعاء الموصلاتCLRالتي تعرّف المغلفات بنفس الطريقة التي ستستخدم بعض الخصائصCLR . كمستهلك لخصائص التبعية المؤسسة, عادةً لا تستخدم الاساليبDependencyObject GetValue و SetValue ، والتي هي نقطة الاتصال إلى نظام الخاصية الأساسي. بدلاً من ذلك, التطبيق الموجود لخاصيةCLR سوف يكون مسمى بالفعل
 GetValue و SetValue داخل get و تطبيقات تغليف الخاصية set، باستخدام حقل معرّف بشكل مناسب. إذا كنت تطبق خاصية تبعية مخصصة بنفسك,سوف يكون تعريف برنامج التضمين بطريقة مشابهة.

متى يجب أن تنفذ خاصية تبعية؟

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

  • تريد الخاصية الخاص بك لتكون قابلة للتعيين في نمط. لمزيد من المعلومات، راجع التنسيق و القولبة.

  • تريد الخاصية الخاص بك لدعم ربط البيانات. للحصول على مزيد من المعلومات حول خاصائص تبعية ربط البيانات ، راجع كيفية القيام بما يلي: ربط خصائص عنصري تحكم.

  • تريد الخاصية الخاصة بك أن تكون قابلة للتعيين بمرجع مورد حيوية. لمزيد من المعلومات، راجع نظرة عامة حول الموارد.

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

  • تريد الخاصية الخاصة بك أن تكون لديها خاصية الحركة. لمزيد من المعلومات، راجع نظرة عامة حول الحركة.

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

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

  • تريد خصائصَ عنصر التحكم المخصص تَلَقي دعم من نوع Visual Studio 2008 مصمم WPF مثل خصائص تحرير الشاشة. لمزيد من المعلومات، راجع نظرة عامة على تأليف التحكم.

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

قائمة اختيار تعريف خاصية التبعية

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

  • (اختياري) إنشاء بيانات التعريف لخاصية التبعية.

  • تسجيل اسم الخاصية مع نظام الخاصية, تحديد نوع "المالك" و نوع قيمة الخاصية. أيضاً تعيين خاصية بيانات التعريف في حالة الاستخدام.

  • تعريف المُعرف DependencyProperty كحقل public static readonly على نوع المالك.

  • تعريف خاصية "المجمّع"CLR الذي له اسم يطابق اسم خاصية التبعية. تطبيق على CLR خاصية "المجمّع" get و الموصلاتset للاتصال بخاصية التبعية التي تنسخها.

تسجيل الخاصية مع نظام خاصية.

من أجل ان تكون الخاصية الخاصة بك خاصية التبعية ، يجب عليك تسجيل هذه الخاصية في جدول تمت صيانته من قبل نظام الخاصية، وأعطها معرّف فريد يُستخدم كمؤهل لعمليات نظام الخاصية لاحقاً. قد تكون هذه العمليات عمليات داخلية, أو التعليمات البرمجية الخاصة بك تقوم بالاتصال بنظام الخاصيةواجهات API. لتسجيل الخاصية، استدعاء اسلوبRegister داخل نَص الفئة الخاصة بك(داخل الفئة ولكن خارج أي من تعريفات عضو). يتم أيضاً توفير حقل معرف بواسطة استدعاء الأسلوبRegister كـ قيمة الإرجاع. السبب الذي يجعل إجراء استدعاء Register يتم خارج تعريفات عضو آخر هو لأنك تستخدام هذه القيمة المرجعة لتعيين وإنشاء حقل public static readonly من النوع DependencyProperty كجزء من الفئة الخاص بك يصبح هذا الحقل معرّف خاصية التبعية الخاصة بك.

Public Shared ReadOnly AquariumGraphicProperty As DependencyProperty = DependencyProperty.Register("AquariumGraphic", GetType(Uri), GetType(AquariumObject), New FrameworkPropertyMetadata(Nothing, FrameworkPropertyMetadataOptions.AffectsRender, New PropertyChangedCallback(AddressOf OnUriChanged)))
public static readonly DependencyProperty AquariumGraphicProperty = DependencyProperty.Register(
  "AquariumGraphic",
  typeof(Uri),
  typeof(AquariumObject),
  new FrameworkPropertyMetadata(null,
      FrameworkPropertyMetadataOptions.AffectsRender, 
      new PropertyChangedCallback(OnUriChanged)
  )
);

اصطلاحات اسم خصائص التبعية

هناك اصطلاحات التسمية المحددة فيما يتعلق بخصائص التبعية التي يجب اتباعها دائما عادا في الحالات الاستثنائية.

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

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

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

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

تطبيق "المجمٌع"

لتنفيذ برنامج التضمين الخاص بك يجب استدعاءGetValue في تطبيقget , و SetValue في تنفيذ set (استدعاء التسجيل الاصلي والحقل يتم عرضهم هنا جداً للتوضيح).

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

كافة خصائص التبعية العمومية الموجودة التي يتم توفيرها على الفئاتWPFتستخدام هذا الطراز البسيط لتطبيق المجمّع;معظم تعقيد كيف تعمل خصائص التبعية بالأصل؛ اما بتوريث سلوك من نظام الخاصية، أو بالطبيق من خلال المفاهيم الأخرى مثل القسرية أو عمليات استرجاعات تغيير الخاصية خلال بيانات التعري الخاصية.


Public Shared ReadOnly AquariumGraphicProperty As DependencyProperty = DependencyProperty.Register("AquariumGraphic", GetType(Uri), GetType(AquariumObject), New FrameworkPropertyMetadata(Nothing, FrameworkPropertyMetadataOptions.AffectsRender, New PropertyChangedCallback(AddressOf OnUriChanged)))
Public Property AquariumGraphic() As Uri
    Get
        Return CType(GetValue(AquariumGraphicProperty), Uri)
    End Get
    Set(ByVal value As Uri)
        SetValue(AquariumGraphicProperty, value)
    End Set
End Property

public static readonly DependencyProperty AquariumGraphicProperty = DependencyProperty.Register(
  "AquariumGraphic",
  typeof(Uri),
  typeof(AquariumObject),
  new FrameworkPropertyMetadata(null,
      FrameworkPropertyMetadataOptions.AffectsRender, 
      new PropertyChangedCallback(OnUriChanged)
  )
);
public Uri AquariumGraphic
{
  get { return (Uri)GetValue(AquariumGraphicProperty); }
  set { SetValue(AquariumGraphicProperty, value); }
}

مرة أخرى، بالاصطلاح ، اسم خاصية المجمّع يجب أن يكون نفس الاسم المختار و المعطي كأول عامل لاستدعاء
 Register الذي يسجيل الخاصية. اذا الخاصية الخاصة بك لا تتبع الاصطلاح, ذلك لا يعطل بالضرورة كافة الاستخدامات المحتملة ولكن فستواجه العديد من المشكلات الملاحظة:

  • لن تعمل بعض أوجه الأنماط والقوالب.

  • يجب أن تعتمد معظم الأدوات والمصممين على اصطلاحات التسمية التي بشكل صحيح تجري تسلسل XAML, أو لتوفير مصمم مساعدة البيئة في مستوى من الخاصية.

  • التطبيق الحالي للمحمٌل WPF XAML تتجاوز المجمٌع بالكامل ، ويعتمد على اصطلاح التسمية عند معالجة قيم السمة. لمزيد من المعلومات، راجع خصائص تحميل و تبعية XAML.

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

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

إذا كنت تقوم بإنشاء خاصية تبعية موجودة في فئة مشتقة من FrameworkElement يمكنك استخدام فئة بيانات التعريف الخاصة أكثر FrameworkPropertyMetadata بدلاً من فئة الأساس PropertyMetadata. المُنشئ للفئةFrameworkPropertyMetadata له تواقيع متعددة حيث يمكنك تحديد تعريفات بيانات متعددة الصفات المميزة في تركيبة. إذا كنت ترغب في تعيين القيمة الافتراضية فقط استخدام التوقيع الذي يأخذ عامل واحد من نوع Object. تمرير عامل الكائن كنوع خاص لقيمة افتراضية للخاصية الخاصة بك(يجب أن تكون القيمة الافتراضية التي تم توفيرها نوع متوفر كعاملpropertyType في الاتصال Register ).

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

تعيين علامات بيانات التعريف المناسب

  • إذا كان لديك خاصية (أو تغييرات في القيمة الخاصة بها) يؤثر على واجهة المستخدم (UI) ، و بشكل خاص يؤثر كيف يجب أن يكون حجم نظام التخطيط أو تقديم العنصر في صفحة، أو أكثر من العلامات التالية: AffectsMeasure, AffectsArrange, AffectsRender.

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

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

    • AffectsRender يشير إلى أن بعض التغييرات حدثت و لن تؤثر على التخطيط و القياس لكن تتطلب تقديم آخر. يمكن ان يكون مثال ان تغيير خاصية لون عنصر موجود, مثل "الخلفية".

    • هذه العلامات غالباً ما تستخدم كبروتوكول في بيانات التعريف في عمليات تجاوز التطبيق الخاصة بك علي نظام الخاصية او عمليات استرجاعات الاطار. على سبيل المثال، قد يكون لديك رد الاتصال OnPropertyChanged التي سيتصل ب
 InvalidateArrange إذا وجدت اي خاصية مثيل تعطي تقارير تغيير قيمة ولديه AffectsArrange ك true في بيانات التعريف الخاصة به.

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

  • بشكل افتراضي،خصائص التبعية تدعم ربط البيانات. يمكنك تعطيل عن عمد ربط البيانات,في الحالات حيث لا يوجد سيناريو واقعي لربط البيانات, أو حيث الأداء في ربط البيانات لـكائن كبير تعرف كمشكلة.

  • افتراضياً، ربط البيانات Mode للحصول على الإعدادات الافتراضية لخصائص التبعية لOneWay. يمكنك دائماً تغيير ربط البيانات TwoWay لكل ربط مثيل; للحصول على تفاصيل، راجع كيفية القيام بما يلي: تعيين اتجاه الربط. إلا انه ككاتب خاصية التبعية، يمكنك اختيار جعل الخاصية تستخدم وضع الربطTwoWay حسب الافتراضي. مثال عن خاصية تبعية موجودة MenuItem.IsSubmenuOpen; السيناريو لهذه الخاصية أن منطق الإعداد
 IsSubmenuOpen و تكوين الشاشة باستخدام التفاعل MenuItem مع سمة النمط الافتراضي الخاصية المنطقية IsSubmenuOpen تستخدم ربط البيانات أصلاً للحفاظ على حالة الخاصية في مطابقة مع حالة أخرى لخصائص وأسلوب استدعاءات . مثال آخر, الخاصية التي تربط TwoWay بشكل افتراضي TextBox.Text.

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

  • تعيين علامةJournal للإشارة إلى خاصية التبعية الخاصة بك يجب أن يتم الكشف عن أو يستخدم من قبل خدمات عمل التنقل اليومية. يوجد مثال خاصيةSelectedIndex;أي عنصر محدد في تحديد عنصر التحكم يجب أن يكون موجود بشكل ثابت عند الانتقال محفوظات العمل اليومية.

خصائص للقراءة فقط التبعية

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

خصائص تبعية مجموعة حسب النوع

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

اعتبارات الأمان لخاصية التبعية

خصائص التبعية يجب تعريفها كـخصائص عامة. معرف حقول خاصية التبعية يجب تعريفه كحقول ثابتة العامة. حتى إذا حاولت التصريح بمستويات الوصول الأخرى (مثل محمية), يمكنك الوصول دوماً إلى خاصية تبعية خلال المعرّف الموجود في تركيبة نظام الخاصية واجهات API. حتى حقل معرّف محمي هو محتمل أن يكون للوصول, لوجود إصدار تقارير بيانات التعريف أو قيمة تحديدواجهات API التي جزء من صواب نظام الخاصية، مثل LocalValueEnumerator. لمزيد من المعلومات، راجع حماية الخاصية التبعية.

خصائص تبعية و مُنشئات الفئة

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

راجع أيضًا:

المبادئ

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

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

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

خصائص تبعية مجموعة حسب النوع

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

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

أنماط الدوال الآمنة لـ DependencyObjects