لقد مر أكثر من عام منذ أن كتبت المقالة الأخيرة. WPF كبير جدًا وهناك الكثير من الأشياء التي يجب كتابتها. وسأواصل التركيز على الضوابط المخصصة للتوسع في النقاط الفنية المتعلقة بها في المناقشة، سنناقش هذه المقالة وأهم شيء هو خصائص تبعية WPF. يجب أن يكون لدى الأصدقاء الذين كانوا على اتصال بها بعض الفهم، ولكن قبل أن نتحدث عن خصائص تبعية WPF، دعونا نلقي نظرة على كيفية استخدام هذه الخصائص. في .net تم استخدامها قبل ظهور WPF.
مشاكل السمات المشتركة
ج# الخصائص الأساسية
خصائص التحكم المخصصة لـ ASP.NET
خصائص التحكم المخصصة لـ WinForm
خصائص التحكم المخصصة لجافا سكريبت
ج# الخصائص الأساسية
مساحة الاسم WPFControlTutorialPart2_Basic
{
شخص من الطبقة العامة
{
سلسلة خاصة _name؛
اسم السلسلة العامة
{
الحصول على { اسم العودة }
تعيين {_الاسم = القيمة}
}
// الخصائص التلقائية
العمر العام {احصل عليه}
}
}
يجب اعتبار ما سبق أهم سمات لغة C# الأساسية، والجميع على دراية بها.
ملاحظة: لم تتم تهيئة الخصائص الافتراضية، وإلا فقد تحدث العديد من الأخطاء غير المعروفة.
(يمكنك اختيار قراءة ما يلي. إذا كنت قد تعرضت للتقنيات التالية، فالأمر في الواقع بسيط للغاية)
خصائص التحكم المخصصة لـ ASP.NET
مساحة الاسم WPFControlTutorialPart2_WebApp
{
فئة عامة WebFromControl: WebControl
{
سلسلة خاصة _controlName؛
اسم عنصر التحكم في السلسلة العامة
{
يحصل
{
إرجاع _controlName؛
}
تعيين
{
_controlName = value;
}
}
تجاوز محمي RenderContents (إخراج HtmlTextWriter)
{
Output.Write("اسم عنصر التحكم هو:"+ControlName);
}
}
}
ما ورد أعلاه هو عنصر تحكم خادم ويب مخصص بسيط.
يركز عنصر تحكم asp.net على العرض، وسيتم استدعاء أسلوب RenderContents في كل مرة يتم فيها تحديث الصفحة، بحيث سيتم إعادة عرضها بغض النظر عما إذا كانت الخصائص قد تغيرت أم لا تغييرات لإخطار إعادة رسم واجهة المستخدم.
ملاحظة: إذا كان من الضروري أن تحتوي سمة ControlName على قيمة لضمان صحة نتيجة الإدخال، فيمكن معالجتها في طريقة get.
يحصل
{
if (_controlName == null) _controlName = string.Empty;
إرجاع _controlName؛
}
خصائص التحكم المخصصة لـ WinForm
عندما تتغير الخاصية، لا تتم إعادة رسمها، ويجب عليك استدعاء الأسلوب Invalidate يدويًا لإدخال الأسلوب OnPaint لإعادة الرسم.
ملاحظة: إذا كنت تريد إعادة رسم الواجهة، فيجب عليك استدعاء الأسلوب يدويًا
خصائص التحكم المخصصة لجافا سكريبت
<div id="demoDiv" style="background-color: Red">مرحبًا</div>
<النص البرمجي>
وظيفة ElementControl (اسم العنصر) {
this.element = document.getElementById(elementName);
}
ElementControl.prototype.setWidth = الوظيفة(العرض) {
this.element.style.width = width;
}
var obj = new ElementControl("demoDiv");
obj.setWidth("مرحبا");
</script>
لا تحتوي أنواع متغيرات JavaScript على أنواع قوية. على سبيل المثال، عند تحديد عرض dom، يمكن أن يكون النوع عددًا صحيحًا فقط. إذا تم تمرير القيمة كسلسلة، فسيحدث خطأ (بالطبع هذا خطأ).
(لا أعرف ما إذا كان الأشخاص الذين استخدموا عناصر التحكم في الواجهة الأمامية لـ js يشعرون بهذه الطريقة. إن تحديد خاصية ثم إعادة تعيين عنصر التحكم وإعادة رسمه أمر مؤلم. يجب تعديله يدويًا، وسيؤثر على تصميم عنصر التحكم بالكامل. )
ملاحظة: التحقق من صحة تعيينات السمات.
من الأمثلة المذكورة أعلاه، يمكننا أن نرى أن السمات النقية لا يمكنها تلبية احتياجات البرنامج.
المتطلبات المذكورة أعلاه ضرورية، وتحدث كثيرًا، ومتكررة جدًا.
حلول موحدة
يقدم ما سبق سلسلة من المشاكل المتعلقة بالسمات، وإذا كانت هناك مشاكل، فسيكون هناك حلول مبسطة.
وفيما يلي ملخص شخصي:
عندما تكون التكنولوجيا معقدة نسبيًا، سيخرج شخص ما لتحديد مجموعة من المعايير لتبسيط التكنولوجيا وتحسين كفاءة الإنتاج.
بغض النظر عن مدى العناية التي يأخذها المصمم في الاعتبار، بمجرد تحديد المعيار، سيتم فقدان المرونة.
قد تتعارض المعايير مع عاداتك الشخصية، يجب أن تتعلم قبول المعايير والعودة إلى موضوع WPF، فالحل في WPF هو خاصية التبعية (DependencyProperty).
حسنًا، هذه المقالة مجرد مقدمة، إذا واجهت هذه المشكلات عند استخدام السمات، فسوف يكون لديك بعض المشاعر.
إذا أدركت أن المشاكل المذكورة أعلاه موجودة بالفعل مع السمات، فهذا يعني أن هذه المقالة قد أكملت مهمتها.
ليس المقصود من هذه المقالة التوسع فيها. ستقدم المقالة التالية نظام خاصية تبعية WPF مرة أخرى.
الجميع مدعوون للمناقشة.