۱۳۸۹/۰۶/۲۵

كنترل DatePicker شمسي مخصوص Silverlight 4


Silverlight 4 تاريخ شمسي را از دات نت فريم ورك به ارث نبرده است (+). اما اضافه كردن آن كار خاصي نيست. مجموعه‌ي سورس باز Silverlight toolkit هم داراي DatePicker تاريخ ميلادي است اما به دلايلي كه عرض شد، تاريخ شمسي را پشتيباني نمي‌كند.

كارهايي كه توسط ساير برنامه نويس‌هاي ايراني تابحال در اين مورد انجام شده است:
- اضافه كردن DatePicker فارسي به مجموعه‌ي Silverlight toolkit : (+)
به دو دليل من از اين راه حل استفاده نخواهم كرد:
الف) patch ارائه شده هنوز با Silverlight toolkit يكپارچه نشده است و هربار بايد اين تغييرات را اعمال كرد و غيره ...
ب) شايد من اصلا نخواهم كه از Silverlight toolkit استفاده كنم. آن وقت چه بايد كرد؟
اين تنها كاري است كه جهت Silverlight انجام شده است.

دو نمونه‌ي خوب ديگر هم براي WPF موجود است كه تبديل آن‌ها به Silverlight كار ساده‌اي نيست (چون Silverlight تمام كلاس‌هاي WPF را نيز به ارث نبرده است):
- Farsi Library - Working with Dates, Calendars, and DatePickers
- PersianDate and some WPF controls for it

به همين جهت يك كنترل DatePicker و تقويم شمسي مستقل را براي Silverlight 4 آماده كرده‌ام كه از آدرس ذيل قابل دريافت است:





نحوه استفاده:
الف) ارجاعي را به اسمبلي SilverlightPersianDatePicker.dll به پروژه خود اضافه كنيد. اگر مباحث library caching هم براي شما مهم است، فايل SilverlightPersianDatePicker.extmap.xml پيوست شده را نيز فراموش نكنيد.
ب) xmlns آن بايد به XAML جاري اضافه شود؛ براي مثال:
xmlns:dp="clr-namespace:SilverlightPersianDatePicker.Views;assembly=SilverlightPersianDatePicker"
ج) سپس استفاده از آن به سادگي يك سطر زير خواهد بود:
<dp:PDatePicker x:Name="txtDate" TextBoxWidth="100"  Margin="5"  />

خاصيت SelectedDate آن تاريخ ميلادي و خاصيت SelectedPersianDate آن تاريخ شمسي را بر مي‌گرداند.


كتابخانه‌هاي كمكي كه در حين توسعه‌ي آن استفاده شدند:
كلاس تقويم شمسي اميد خندان راد (كه براي روزهاي دات نت 1 تهيه شده بود).
پنل UniformGrid كه در Silverlight موجود نيست.(+)
رفتار StaysOpen مرتبط با Popup كه در Silverlight از WPF به ارث نرسيده است.(+)
استفاده از كلاس DelegateCommand جان پاپا (براي سهولت Commanding در الگوي MVVM). (+)