إرشادات حول تصميم عناصر تحكم قابلة لأخذ نمط

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

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

  • المصطلحات
  • قبل البدء: أفهم عنصر تحكمك
  • إرشادات عامة
  • اعتبارات الموضوع
  • موضوعات ذات صلة

المصطلحات

تشير "Styling and templating" لمجموعة من التقنيات التي تمكّن كاتب عنصر التحكم من تأجيل الأوجه المرئية لعنصر التحكم الي النمط والقالب لعنصر التحكم. تتضمن هذه المجموعة من التقنيات علي:

  • الأنماط (بما في ذلك المعينات و المشغّلات و لوحات العمل).

  • موارد.

  • قوالب عناصر التحكم

  • قوالب البينات

للحصول على مقدمة عن "styling templating", راجع التنسيق و القولبة.

قبل البدء: أفهم عنصر تحكمك

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

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

إرشادات عامة

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

    • تصغير العقود قدر الإمكان.

    • تصميم حول توقع التي أثناء وقت التصميم (التي هو، عند استخدام أداة تصميم) هو الشائعة الخاصة بقالب عنصر تحكم في الولاية غير كاملة. WPFلا تقدم بنية تحتية الولاية "composing" حيث يكون لعناصر التحكم إلى يتم إنشاؤها بواسطة توقع أن مثل هذه الولاية قد تكون صالحة.

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

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

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

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

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

    يعرض الجدول التالي عناصر مساعدة باستخدام أنماط عنصر التحكم اليوم (هذه القائمة ليست شاملة):

    العنصر

    Type

    المستخدمة بواسطة

    ContentPresenter

    نوع-مستند

    Button ،CheckBox ،RadioButton ،Frame وهكذا (كافة الانواع ContentControl )

    ItemsPresenter

    نوع-مستند

    ListBox ،ComboBox ،Menu ،ItemsControl وهكذا (كافة الانواع )

    ToolBarOverflowPanel

    اسم الملف

    ToolBar

    Popup

    مستقل

    ComboBox, ToolBar, Menu, ToolTip,و هكذا

    RepeatButton

    اسم الملف

    Slider, ScrollBarو هكذا

    ScrollBar

    اسم الملف

    ScrollViewer

    ScrollViewer

    مستقل

    ListBox, ComboBox, Menu, Frame,و هكذا

    TabPanel

    مستقل

    TabControl

    TextBox

    اسم الملف

    ComboBox

    TickBar

    نوع-مستند

    Slider

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

    • يجب تعريف عنصر المساعد المسمي بواسطة الأصل و يجب علي الأصل إنشاء أي إعدادات مطلوبة على العنصر المساعد.

    • يجب علي عناصر المساعد‏‫ نوع-مستند إنشاء أي إعدادات مطلوبة مباشرة على أنفسهم. قد يتطلب ذلك علي العنصر المساعد الاستعلام عن سياق المعلومات التي يجري استخدامها فيه ، بما في ذلك TemplatedParent ( نوع عنصر التحكم للقالب الذي يتم استخدامه فيه). على سبيل المثال، يربطContentPresenter تلقائياً خاصية Content من TemplatedParent إلى خاصية Content عند استخدامها في اشتقاق النوع ContentControl .

    • لا يمكن تحسين العناصر المساعدة المستقلة بهذه الطريقة لأن ،وفقاً للتعريف، لا عنصر المساعد أو الأصل يعرف عن الآخر.

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

  • استخدام أفضل الممارسات للتعبير عن حالة عنصر التحكم وسلوكه في النمط. التالي قائمة مرتبة من أفضل الممارسات من أجل تعبير التغييرات في حالة عنصر التحكم وسلوكه في النمط. يجب عليك استخدام العنصر الأول على القائمة التي تمكّن السيناريو الخاص بك.

    1. خاصية الربط. مثال: الربط بين ComboBox.IsDropDownOpen و ToggleButton.IsChecked.

    2. تشغيل خصائص التغييرات أو خصائص الحركات. مثال: حالة المرور فوق Button.

    3. الامر. مثال: LineUpCommand / LineDownCommand في ScrollBar.

    4. عناصر المساعد المستقلة مثال: TabPanel في TabControl.

    5. أنواع المساعد نوع-مستند‬ مثال: ContentPresenter فيButton ،TickBar فيSlider.

    6. عناصر المساعد‏‎ ‎‏‎المسماة‏‎ مثال: TextBox في ComboBox.

    7. فقاعات الأحداث من أنواع المساعد المسماة. إذا استمعت لفقاعات الأحداث من نمط العنصر، يجب أن تطلب العنصر المنشئ للحدث أن يعرف بشكل فريد. مثال: Thumb في ToolBar.

    8. سلوكOnRender المخصصة . مثال: ButtonChrome في Button.

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

  • يجب التوافق مع أنماط التصميم الموجود. توجد في عدة مرات، عدة طرق لحل المشكلة. يجب أن تكون على علم بالو ،عند الإمكان، متناسقا مع نقوش نمط عنصر التحكم. هذا مهم بشكل خاص لعناصر التحكم المشتاقة من نفس النوع الأساسي (على سبيل المثال، ContentControl ، ItemsControl ، RangeBase وهكذا).

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

    • يجب كشف التخصيصات الشائعة جداً كخصائص على عنصر التحكم و مستهلكة من قبل القالب.

    • يجب كشف الخصائص المخصصة الأقل شيوعًا (بالرغم من انها غير نادرة ) كخصائص مرفقة و مستهلكة من قبل القالب.

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

اعتبارات الموضوع

  • يجب محاولة أنماط الموضوع لجعل الدلالات الملكية متناسقة عبر جميع المواضيع ، دون إجراء أي ضمان. كجزء من الوثائق الخاصة به، يجب علي عنصر التحكم أن يكون لديه مستند لوصف الدلالات الملكية لعنصر التحكم وهو "معنى" خاصية عنصر التحكم. على سبيل المثال، يجب علي عنصر التحكم ComboBox تعريف معنى الخاصية Background داخل ComboBox. يجب علي الأنماط الافتراضية لعنصر التحكم الخاص بك محاولة اتباع الدلالات المعرّفة في هذا المستند عبر كافة المواضيع. مستخدمين عنصر التحكم، من ناحية أخرى، يجب أن يدركوا ان دلالات الخصائص يمكن ان تتغير من موضوع لموضوع. في بعض الحالات، قد لا يكون تعريب الخاصية المعطاة ضمن القيود المرئية المطلوبة من قبل موضوع معين. (ليس لدي الموضوع التقليدي، على سبيل المثال، حد واحد يمكن عليه تطبيق الThickness للعديد من عناصر التحكم.)

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

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

راجع أيضًا:

المبادئ

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

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