مشاركة عبر


الموارد و التعليمات البرمجية

تركز النظرة العامة هذه حول Windows Presentation Foundation (WPF) الموارد التي يمكن الوصول إليها أو إنشاؤها باستخدام التعليمات البرمجية بدلاً من Extensible Application Markup Language (XAML) بناء الجملة. للحصول على مزيد من المعلومات حول استخدام الموارد العامة والموارد من XAML منظور بناء الجملة, راجع نظرة عامة حول الموارد.

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

  • الوصول إلى الموارد من التعليمات البرمجية
  • إنشاء موارد بتعليمات برمجية
  • تستخدم الكائنات كمفاتيح
  • موضوعات ذات صلة

الوصول إلى الموارد من التعليمات البرمجية

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

التالي هو مثال تعليمة برمجية مختصراً يبحث عن مورد بواسطة مفتاح و يستخدم القيمة التي تم إرجاعها لتعيين خاصية، مطبقة كـ Click معالج الحدث.

    Private Sub SetBGByResource(ByVal sender As Object, ByVal e As RoutedEventArgs)
      Dim b As Button = TryCast(sender, Button)
      b.Background = CType(Me.FindResource("RainbowBrush"), Brush)
    End Sub
void SetBGByResource(object sender, RoutedEventArgs e)
{
  Button b = sender as Button;
  b.Background = (Brush)this.FindResource("RainbowBrush");
}

طريقة بديلة لتعيين مرجع مورد هي SetResourceReference. يأخذ هذا الأسلوب معلمتين: مفتاح المورد و المعرّف لخاصية تبعية معينة التي توجد على مثيل العنصر التي يجب تعيين قيمة المورد إليها. عمليا، هذا الأسلوب هو نفسه و له ميزة عدم تتطلب أية نوع من قيم الإرجاع.

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

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

إنشاء موارد بتعليمات برمجية

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

تستخدم الكائنات كمفاتيح

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

راجع أيضًا:

المبادئ

نظرة عامة حول الموارد

التنسيق و القولبة