بناء مسار جملة XAML

كائن PropertyPath يدعم بناء الجملة XAML المضمن المعقد من أجل تعيين الخصائص المختلفة التي تأخذ نوع PropertyPath كالقيمة الخاصة بهم. يُوثِّق هذا الموضوع بناء جملة PropertyPath كما هو مُطبَّق إلى بُنى جمل الربط و الحركة.

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

  • اين يتم استخدام PropertyPath
  • PropertyPath للكائنات في ربط البيانات
  • PropertyPath لأهداف الحركة
  • PropertyPath في التعليمات البرمجية
  • موضوعات ذات صلة

اين يتم استخدام PropertyPath

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

بشكل أساسي، WPF يستخدم PropertyPath لوصف مسارات طراز الكائن لعبور خصائص من مصدر بيانات الكائن و لوصف مسار الهدف للحركات المستهدفة.

بعض خصائص النمط و القالب مثل Setter.Property تستغرق اسم خاصية مؤهل الذي هو ظاهرياً مشابهة إلى PropertyPath. لكن هذا ليس PropertyPath حقيقي؛ بدلاً من ذلك هو استخدام تنسيق سلسلة owner.property مؤهل التي يتم تمكينها بواسطة معالج XAML WPFفي تركيبة مع محول نوع ل DependencyProperty.

PropertyPath للكائنات في ربط البيانات

ربط البيانات هو ميزة WPF فيه يمكنك الربط إلى قيمة الهدف من أي خاصية تبعية. مع ذلك، مصدر لربط البيانات كهذا لا يحتاج أن يكون خاصية تبعية؛ يمكن أن يكون أي خاصية التي يتم التعرف عليها من قبل موفر البيانات القابلة للتطبيق. مسارات الخاصية تستخدم بشكل خاص ل ObjectDataProvider، الذي يُستخدم للحصول على مصادر الربط من كائنات وقت تشغيل اللغة العامة (CLR) و الخصائص الخاصة بهم.

لاحظ أن ربط البيانات إلى XML لا يستخدم PropertyPath ، لأنه لا يستخدم Path في Binding. بدلاً من ذلك، يمكنك استخدام XPathو صحيح بناء جملة XPath في تحديد نموذج كائن مستند (DOM) XMLللبيانات. XPathهو أيضا بتحديد كسلسلة، ولكن هو غير موثقة هنا؛ راجعكيفية القيام بما يلي: ربط بيانات XML باستخدام XMLDataProvider واستعلامات XPath.

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

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

<Binding Path="propertyName" .../>

propertyName يجب حلها لتكون اسم الخاصية التي في DataContext الحالي للاستخدام Path. إذا كان الربط الخاص بك يقوم بتحديث المصدر, يجب أن تكون الخاصية القراءة/الكتابة و مصدر الكائن يجب أن يكون قابل للتغيير‬.

مفهرس مفرد على الكائنات الفورية كسياق البيانات

<Binding Path="[key]" .../>

key يجب أن يكون إما فهرس مكتوب إلى قاموس أو جدول تجزئة, أو فهرس عدد صحيح من الصفيف. أيضاً، يجب أن تكون قيمة المفتاح نوع مربوط مباشرةً إلى الخاصية حيث هو مطبقاً. على سبيل المثال، جدول تجزئة الذي يحتوي على مفاتيح السلسلة و قيم السلسلة يمكن استخدامها بهذه الطريقة للربط إلى النص من أجل TextBox. أو إذا أشار المفتاح إلى المجموعة أو فهرس فرعي، يمكنك استخدام بناء الجملة هذا للربط إلى خاصية مجموعة الهدف. وإلا ستحتاج إلى أن تشير إلى خاصية معينة خلال بناء الجملة مثل <Binding Path="[key].propertyName" .../>

يمكنك تحديد نوع الفهرس إذا لزم الأمر. للحصول على تفاصيل حول هذا المفهوم من مسار الخاصية المفهرس, راجع Binding.Path.

خاصية متعددة (استهداف خاصية غير مباشر)

<Binding Path="propertyName.propertyName2" .../>

propertyName يجب حلها لتكون اسم الخاصية التي هي DataContext الحالي. مسار خصائص propertyName و propertyName2 يمكن أن تكون أية خصائص موجودة في علاقة حيث propertyName2 هي خاصية موجودة على نوع الذي هو قيمة من propertyName.

الخاصية الفردية, المرفقة أو مؤهل من نوع

<object property="(ownerType.propertyName)" .../>

الأقواس تشير إلى أن هذه الخاصية في PropertyPath يجب أن يتم إنشائها باستخدام التأهيل الجزئي. يمكنها استخدام مساحة اسم XML للبحث عن النوع مع التعيين المناسب. ownerType يبحث عن الأنواع التي معالج XAML له حق الوصول إليه، خلال تعريفات XmlnsDefinitionAttribute في كل تجميع. أن معظم التطبيقات مساحة اسم XML الافتراضي إلى https://schemas.microsoft.com/winfx/2006/xaml/presentationمساحة الاسم، لذلك بادئة هو عادة عند الضرورة فقط لتخصيص أنواع أو أنواع otherwهوe خارج ذلك مساحة اسم. propertyNameيجب حل إلى أن يكون اسم خاصية موجود تشغيلownerType. يتم عادة استخدام هذا البناء للجملة لإحدى الحالات التالية:

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

  • الخاصية هي خاصية مُرفقة

  • انك تقوم بالربط إلى خاصية ثابتة

للاستخدام كهدف لوحة العمل, الخاصية المحددة كـ propertyName يجب أن تكون DependencyProperty.

مصدر الانتقالي (الربط إلى هرميات من المجموعات)

<object Path="propertyName/propertyNameX" .../>

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

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

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

طرق عرض المجموعة

للإشارة إلى عرض مجموعة مسماة، بادئة اسم عرض المجموعة مع حرف التجزئة (#).

مؤشر السجل الحالي

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

مفهرسات متعددة

<object Path="[index1,index2...]" .../>
or
<object Path="propertyName[index,index2...]" .../>

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

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

خلط بُنى الجمل

يمكن أن يكون كل من بُنى جمل الموضح أعلاه منثور‬. على سبيل المثال، التالي هو مثال ينشئ مسار الخاصية إلى اللون عند x,y معينة من خاصية ColorGrid التي تحتوي على صفيف شبكة بكسل من كائنات SolidColorBrush:

<Rectangle Fill="{Binding ColorGrid[20,30].SolidColorBrushResult}" .../>

الهروب لسلاسل مسار الخاصية

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

  • مفهرسات الداخل ([]) أو حرف الإقحام (^) تهرب من الحرف التالي.

  • يجب عليك الهروب (باستخدام وحدات XML) أحرف معينة الخاصة إلى تعريف لغة XML. استخدم &amp; لتهريب الحرف "&". استخدم &gt; لتهريب علامة النهاية ">".

  • يجب عليك هروب (باستخدام الخط المائل العكسي \) الأحرف الخاصة إلى سلوك محلل WPF XAML لمعالجة ملحق العلامات.

    • خط مائل عكسي (\) هو حرف الهروب نفسه.

    • تفصل علامة المساواة (=) اسم الخاصية من قيمة الخاصية.

    • تفصل الفاصلة (,) الخصائص.

    • الأقواس المتعرجة اليمنى (}) هي نهاية ملحق العلامات.

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

من الناحية التقنية، الهروب يعمل لمسار خاصية لوحة العمل أيضاً، و لكنك عادةً تجتاز طرازات الكائن لكائنات WPF الموجودة و الهروب يجب أن يكون غير ضروري.

PropertyPath لأهداف الحركة

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

اعتبارات كائن-خاصية عامة للحركات

للحصول على مزيد من المعلومات حول مفاهيم الحركة بشكل عام، راجع نظرة عامة حول لوحات العمل و نظرة عامة حول الحركة.

نوع القيمة أو الخاصية التي يتم تحريكها يجب أن تكون إما نوع Freezable أو أولي. الخاصية التي تبدأ المسار يجب أن تحل لتكون اسم الخاصية التبعية الموجودة على نوع TargetName المحدد.

من أجل دعم الاستنساخ لتحريك Freezable الذي تم بالفعل تجميده ، الكائن المحدد بواسطة TargetName يجب أن يكون FrameworkElement أو الفئة المشتقة FrameworkContentElement.

خاصية مفردة على كائنات الهدف

<animation Storyboard.TargetProperty="propertyName" .../>

propertyName يجب أن تحل لتكون اسم الخاصية التبعية الموجود على نوع TargetName المحدد.

استهداف خاصية غير مباشر

<animation Storyboard.TargetProperty="propertyName.propertyName2" .../>

propertyName يجب أن تكون خاصية إما نوع قيمة Freezable أو أولي, الذي يوجد على نوع TargetName المحدد.

propertyName2 يجب أن يكون اسم الخاصية التبعية الموجودة على الكائن الذي هو القيمة من propertyName. بمعنى آخر، propertyName2 يجب أن يكون موجود كخاصية تبعية على النوع الذي هو propertyName PropertyType.

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

على سبيل المثال، خاصية Background من Panel هي Brush كاملة (فعلياً SolidColorBrush) التي تأتي من قالب السمة. لتحريك Brush بشكل كامل، سيحتاج أن يكون BrushAnimation (من المحتمل أن يكون واحد لكل نوع Brush) و لا يوجد مثل هذا النوع. لتحريك فرشاة ، تقوم بدلاً من ذلك بتحريك خصائص من نوع Brush معين. تحتاج إلى الوصول من SolidColorBrush إلى Color الخاص به لتطبيق ColorAnimation هناك. مسار الخاصية لهذا المثال ستكون Background.Color.

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

<animation Storyboard.TargetProperty="(ownerType.propertyName)" .../>

الأقواس تشير إلى أن هذه الخاصية في PropertyPath يجب أن يتم إنشائها باستخدام التأهيل الجزئي. يمكنها استخدام مساحة اسم XML للعثور على النوع. ownerType يبحث عن الأنواع التي معالج XAML له حق الوصول إليه، خلال تعريفات XmlnsDefinitionAttribute في كل تجميع. أن معظم التطبيقات مساحة اسم XML الافتراضي إلى https://schemas.microsoft.com/winfx/2006/xaml/presentationمساحة الاسم، لذلك بادئة هو عادة عند الضرورة فقط لتخصيص أنواع أو أنواع otherwهوe خارج ذلك مساحة اسم. propertyNameيجب حل إلى أن يكون اسم خاصية موجود تشغيلownerType. الخاصية المعينة على أنها propertyName يجب أن تكون DependencyProperty. (كافة الخصائص المرفقة WPF يتم تطبيقها كخصائص تبعية, لذلك هذه المشكلة فقط لها أهمية بالنسبة الخصائص المرفقة المخصصة.)

المفهرسات

<animation Storyboard.TargetProperty="propertyName.propertyName2[index].propertyName3" .../>

معظم الخصائص التبعية أو أنواع Freezable لا تدعم مفهرس. لذلك، الاستخدام الوحيد للمفهرس في مسار الحركة هو في الموضع المتوسط بين الخاصية التي تبدأ السلسلة على الهدف المسمى و الخاصية المتحركة النهائية. في بناء الجملة المتوفر, هو propertyName2. على سبيل المثال، قد يكون استخدام مفهرس ضروري إذا كانت الخاصية المتوسطة هي مجموعة مثل TransformGroup, في مسار الخاصية مثل RenderTransform.Children[1].Angle.

PropertyPath في التعليمات البرمجية

استخدام التعليمات البرمجية من أجل PropertyPath ، بما في ذلك كيفية إنشاء PropertyPath، تم توثيقها في موضوع المرجع لـ PropertyPath.

في العام, تم تصميم PropertyPath لاستخدام اثنين من المُنشئات المختلفة, واحد لاستخدامات الربط و استخدامات الحركة الأبسط و واحد لاستخدامات الحركة المعقدة. استخدم توقيع PropertyPath(Object) لاستخدامات الربط، حيث الكائن هو سلسلة. استخدم توقيع PropertyPath(Object) مسارات حركة الخطوة الواحدة حيث الكائن هو DependencyProperty. استخدم توقيع PropertyPath(String, array<Object[]) للحركات المعقدة. يستخدم هذا المُنشئ الأخير سلسلة الرمز المميز للمعلمة الأولى و صفيف من الكائنات التي تملأ المواضع في سلسلة الرمز المميز لتعريف علاقة مسار خاصية.

راجع أيضًا:

المرجع

PropertyPath

المبادئ

نظرة عامة لربط البيانات

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