سؤال

لقد مؤخرا UserControl, الذي استغرق وقتا طويلا, لأنه كان يعمل مع العرف التبعية خصائص وهلم جرا...

على أي حال, كان مجرد حفنة من 3 عناصر التحكم:مربع نص المنبثقة مع شجري هرمية.

الآن أدركت أنني ربما يمكن كتابة ControlTemplate فقط.وبالتالي ما هو الفائدة من استخدام UserControl?

هل كانت مفيدة؟

المحلول

هناك ثلاث حالات للنظر هنا:UserControl, ControlTemplate ، مخصص التحكم.(انا اعتقد DataTemplate لا يحتاج إلى تفسير)

A التحكم المخصصة هو شيء كنت تقدم عند إنشاء قاعدة وظائف جديدة عنصر واجهة المستخدم.هناك العديد من الايجابيات والسلبيات لهذا ، ولكن على سبيل المثال ، إذا كنت تريد اختيار مخصص السلوك ItemsControl ، يمكن أن الأفضل القيام بذلك عن طريق subclassing محدد أو MultiSelector (إن wpftoolkit DataGrid يفعل هذا).أيضا, إذا كنت تريد كائن يحتوي على جديد DependencyProperty في معظم الحالات تنبع من السيطرة.

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

A ControlTemplate هو في جوهره وصفا بديلا البصرية الشجرة ، يمكن تعيين إما صراحة على FrameworkElements ، أو كجزء من نمط.هذا هو الخيار الذي ينبغي أن تهدف عندما يكون الهدف الخاص بك في المقام الأول إلى تقديم طلب وينبغي القيام به معها.يمكنك أن تفعل أي شيء تقريبا مع ControlTemplate بصريا ، إذا كنت قادرا على الحصول على الارتباطات و المشغلات (و ممكن تحتوي على النمط نفسه) صحيح.كل هذا يمكن أن يكون كما أعلن موارد استخدامها لإعطاء التطبيق الخاص بك مشترك "موضوع".

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

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

(لمزيد من المعلومات حول MVVM بين العديد من الآخرين جوجل جوش سميث, ساشا الحلاق و كارل Shifflett رائع المواد)

نصائح أخرى

إذا قمت بإضافة خصائص التبعية الخاصة بك، فستحتاج إلى فصلك الخاص لتعريفها.

كما تريد تطبيق قالب إلى الفصل، سيتعين على هذه الفئة المخصصة أن تستمد من Control (كما UserControl هل).

الفائدة الرئيسية لكتابة الخاصة بك ControlClase -Derved هو أنه يمكن أن يكون لها قالب الخاص به على سيناريوهات الاستخدام الأخرى، إما عن طريقك داخل التطبيق، أو من قبل مستخدمين آخرين للنوع.

هناك القليل جدا من النفقات العامة في استخدام UserControl صف دراسي. في الواقع، إذا نظرت إليها في Exclector.net، سترى أنه بالكاد لديه أي رمز. بالدرجة الأولى، UserControl يعيد تعريف البيانات الوصفية فقط على بعض خصائص التبعية الموجودة (مثل جعل القيمة الافتراضية لل FocusableProperty false.)

ما لم تكن بحاجة إلى إعادة تعريف قالب التحكم على الفور، يمكنك تركه ك UserControl في الوقت الحالي وتغييره لاحقا إذا لزم الأمر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top