# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > WPF >  تقویم شمسی برای WPF

## Davood_amega

متاسفانه MIcrosoft تقویم شمسی را در Visual Studio 2010 قرار نداد دوستان یه کارهای انجام داده اند اما کامل نیست یا اینکه مشکلات خاص خود را دارد مثل نمونه زیر :
http://mds-soft.persianblog.ir/post/70/
در حال گشتن همچین تقویمی بودم که این نمونه را پیدا کردم که با Silverlight طراحی شده و برای سایتها استفاده می شود اما برنامه ام وب سایت نیست .
1- آیا می توانم از این فایل استفاده کنم ؟
2- چطور این تقویم را به پروژه ام اضافه کنم ؟
3- تقویم دیگری مثل همین نمونه برای WPF ( برنامه Application ) وجود ندارد ؟

----------


## مهدی فرزاد

سلام
ايميل بدهيد تا برايتان ايميل كنم

----------


## Davood_amega

خیلی خیلی ممنون

----------


## مهدی فرزاد

این حجمش کم بود همین جا برات گذاشتم
این Dll ها توابع و کلاسهای زیادی برای کار با تقویم فارسی و حتی تبدل عدد به نوشته دارن
سورس کاملش رو برات امیل میکنم

----------


## رضا عربلو

https://barnamenevis.org/showpo...0&postcount=10

----------


## Davood_amega

بنده به یک Dll یا چیز دیگه ای مثل اون احتیاج دارم که ComboBox های خودم از اون استفاده کنند .
اگر از Calender خود WPF استفاده کنم هم خیلی خوب میشه اینجا هم یه چیزای نوشته .
مثلا با اضافه کردن xml:lang="Fa-IR" به Window خودمون Calender به صورت زیر می شود .

 


> این حجمش کم بود همین جا برات گذاشتم
> این Dll ها توابع و کلاسهای زیادی برای کار با تقویم فارسی و حتی تبدل عدد به نوشته دارن
> سورس کاملش رو برات امیل میکنم


متاسفانه Object که اضافه می شود از لحاظ ظاهزی با فرمهامون همخوانی ندارد و ضمنا قابلیت ویرایش ندارد و مشکل دیگری که دارد این است که توانایی ندارد که تاریخ خاصی را از ما بگیرد و نمایش دهد .



> https://barnamenevis.org/showpo...0&postcount=10


نتونستم روی فرمهای خودمون بذارم اگر یه راهنمایی بکنید ممنون خواهم شد .

----------


## مهدی فرزاد

> متاسفانه Object که اضافه می شود از لحاظ ظاهزی با فرمهامون همخوانی ندارد و ضمنا قابلیت ویرایش ندارد و مشکل دیگری که دارد این است که توانایی ندارد که تاریخ خاصی را از ما بگیرد و نمایش دهد .
> 
> نتونستم روی فرمهای خودمون بذارم اگر یه راهنمایی بکنید ممنون خواهم شد .


اون چیزی که من برای شما گذاشتم و اون چیزی که آقای عربلو گذاشتن یکی هست و قابلیت هاش کامله به مثال های خودش و سورس برنامش نگاه کنید و ببینید چطوری استفاده میشه
قابلیت ویرایش ظاهر هم داره من خودم این کار رو نکردم ولی توی سورس برنامش در قسمت WPF Demo این کار رو انجام داده
مثالش رو برات میگذارم سورسش هم که داری
راستی موقع اجرای مثال یک error رو ی صفحه میاد بدون اینکه Ok کنی برو به پنجره برنامه و اونو روی حالت فارسی بگذار و با برنامه کار کن error رو OK نکن

----------


## Davood_amega

اما هر کاری می کنم نمیشه !
Dll ها را اضافه می کنم اما نمیتونم از کدا سر در بیارم !
لطفا یه مثال بذارید که یه ComboBox با تقویم شمسی داشته باشد.( البته در WPF)

----------


## مهدی فرزاد

مثالی که توی پست شماره 4 گذاشتم داره(Test) اگه منظور شما چیز دیگست دقیق تر توضیح بدید.

----------


## Davood_amega

این ComboBox مربوط به DLL هاست . می خواستم طبق ComboBox که خودم طراحی کردم ، روش های اتصال به DLLها را بدونم .
یه سوال دیگه این که این آدرس های که در Window هست چیه ؟ 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

----------


## مهدی فرزاد

> این ComboBox مربوط به DLL هاست . می خواستم طبق ComboBox که خودم طراحی کردم ، روش های اتصال به DLLها را بدونم .
> یه سوال دیگه این که این آدرس های که در Window هست چیه ؟ 
> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"


این جواب سئوال دوم
https://barnamenevis.org/showpo...1&postcount=15

برای سئوال اول چون ضمیمه سایت کار نمیکنه برات ایمیل کردم توی این نمونه ظاهر combo رو عوض کردم همچنین دقت کن ظاهر Combo برنامه و Combo تقویم یکی هستن و همچنین ظاهر Button تقویم و Button برنامه
Microsoft Expression Blend بلد باشی کارت راحت تر میشه

----------


## saeed1386

این کامپوننت را خودم طراحی کردم .
 


قابلیتهای زیادی هم داره
مثل:· امکان تغییر سایز کامپوننت 
· امکان تعیین تاریخ امروز (پیش فرض از تاریخ سیستم استفاده میکند)
· امکان تغییر رنگ زمینه روزها 
· تغییر فونت روزها 
· تعیین تاریخ انتخاب شده به صورت برنامه نویسی 
· دریافت تاریخ انتخاب شده توسط کاربر 
· دارای لیست تاریخ های پر رنگ و بخصوص (BoldedDates) 
· اضافه و حذف از لیست تاریخ های پر رنگ 
· امکان ایجاد رویداد های مختلف برای روزها مثل MouseClick , MouseDoubleClick , ...
همراه فایل یه pdf هست که تمام امکاناتش توضیح داده شده.
از آدرس زیر میتونی دریافت کنی:
http://behsoft.blogfa.com/post-4.aspx
یه نمونه پروژه (windows Application) با C#‎‎‎ هم نوشتم. آدرسش:
http://behsoft.blogfa.com/post-5.aspx

----------


## مهدی فرزاد

> این کامپوننت را خودم طراحی کردم .




سلام آقا سعيد
بابت اينكه اين تقويم رو براي استفاده دوستان معرفي كرديد متشكرم 
ولي فكر ميكنم اين تقويم تحت WinApp باشه و براي WPF كارايي نداره ؟ درسته؟
اگه بتونيد يك نسخه از اون رو تحت WPf هم درست كنيد معركه ميشه
بازم متشكر

----------


## saeed1386

> سلام آقا سعيد
> بابت اينكه اين تقويم رو براي استفاده دوستان معرفي كرديد متشكرم 
> ولي فكر ميكنم اين تقويم تحت WinApp باشه و براي WPF كارايي نداره ؟ درسته؟
> اگه بتونيد يك نسخه از اون رو تحت WPf هم درست كنيد معركه ميشه
> بازم متشكر[/right]


خیلی ممنون
من خیلی با WPF آشنایی ندارم . البته تاحدودی کار کردم.
اگه تونستم بنویسمش حتما براتون میذارم.

اطلاع نداشتم که dll های winApp در WPF کارایی نداره.

----------


## Davood_amega

سلام و ممنون از دوستانی که این پستو دنبال می کنن .
بالاخره یه Calender شمسی عالی که دقیقا مثل میلادیه( با کلیک بر روی ماه ، ماههای سال مورد نظر را می آورد و با کلیک بروی سال ، دهه که این سال قرار دارد را می آورد ) پیدا کردم .
اینم لینکش : 
*Arash Sahebolamri* 
از این دوست هم میهنی باید ممنون باشیم که این کار خیلی قشنگ را طراحی کردن .
کافیه فقط فایل PersianDateControl.dll را به Toolbox اضافه کنید .

----------


## مهدی فرزاد

> سلام و ممنون از دوستانی که این پستو دنبال می کنن .
> بالاخره یه Calender شمسی عالی که دقیقا مثل میلادیه( با کلیک بر روی ماه ، ماههای سال مورد نظر را می آورد و با کلیک بروی سال ، دهه که این سال قرار دارد را می آورد ) پیدا کردم .
> اینم لینکش : 
> *Arash Sahebolamri* 
> از این دوست هم میهنی باید ممنون باشیم که این کار خیلی قشنگ را طراحی کردن .
> 
> کافیه فقط فایل PersianDateControl.dll را به Toolbox اضافه کنید .


سلام
تقویم خوبیه فقط یکم از نظر قرار گیری فونتهاشمشکل داره و اعداد از کادر بیرون زدن سعی میکنم ار رو ی سورس برنامش اینو اصلاح کنم و توی همین پست میگذارم

ولی ای کاش توابع و کلاسهایی متنوع که در تقویمی که من معذفی کردم رو هم داشت که دیگه عالی میشد
البته میشه از کلاس های اون تقویم در کنار توقیمی که شما معرفی کردید استفاده کرد
متشکرم

----------


## lastmory

سلام به همه ی دوستان.من احتیاج ضروری دارم به کد این تاریخ فارسی...خودم dll دارم.اما کدشو میخوام...ممنون از لطف همه.... :لبخند:

----------


## Davood_amega

کدش هم در لینک زیر موجوده !
*Arash Sahebolamri*

----------


## Davood_amega

سلامی دوباره 
چند تا از مشکلاتی که این Componnent داره :
1- بعد از کلیک روی تاریخ موردنظر در DatePicker ، کادری که باز شده بسته نمی شود و باید روی یه جای در فرم کلیک کنیم . که با اصلاح کد مشکل حل شد . Dll اش رو در لینک زیر می توانید دانلود کنید .
لینک دانلود PersianDateControls
از Mehdi550u ممنون که یه تلنگری بهم انداخت که کدو تغییر بدم .
2- با Tab رابطه خوبی نداره و نمی دونم چرا تو فرمهام TabIndex بالاترینم باشه بازم آخرین Object ای است که روش می ریم .
3- تبدیل شمسی داره ولی تبدیل میلادی نداره و تو چند از فرمهام مشکل خوردم و با FarsiLibrary.Utils هم که خواستم کار کنم SelectedDate نتونست باهاش کار کنه البته اگر خصویت  Text را پر کنم مشکلی نداره .
4- با تغییر اندازه بعضی مواقع دچار مشکل می شود و فونتها بهم میریزه !

----------


## arash.sahebolamri

سلام به همگی

از لطفتون و feedback تون ممنونم. مخصوصا جناب Davood_Amega.
مشکلاتی رو که گفتین سعی می کنم حل کنم. فقط یکی 2 تا موردو فعلا توضیح بدم:

-تبدیل شمسی به میلادی تو PersianDate هست، با متد () ToDateTime. تبدیل میلادی به شمسی هم همینطور. یه constructor داره که DateTime می گیره. یعنی اگه مثلا می خواین SelectedDate تو PersianDatePicker یا PersianCalendar معادل یه تاریخ میلادی باشه:
DateTime d=...;myDatePicker.SelectedDate=new PersianDate(d);اگه منظورتون چیز دیگه ای هست دقیق تر بگین لطفا.

-من که با تغییر اندازه مشکلی ندیدم. اگه منظورتون نشون داده نشدن نصفه پایینی عدد هاس به نظرم مشکل از فونته. چون با فونت های انگلیسی این مشکلو نداره. 

اگه بازم چیزی به نظرتون رسید ممنون می شم خبرم کنین :لبخند:

----------


## Davood_amega

آرش جان بهت خیرمقدم میگم ، انشاالله که تو این سایت بتونیم از اطلاعات هم استفاده کنیم (البته اطلاعات بنده حداقل خیلی کمه اما دوستان بسیار قوی هم در جمعمون هستند )
در مورد فونت کاملا کاملا حق با شماست تو انتخاب Size فونت کمی بی دقتی کردم چون می خواستم اون تاریخی که در حال حاضر کاربر میبینه بزرگتر باشه اما کادری که باز میشه رو نادیده گرفته بودم اما مشکل زیر را هم چک کن:



> با Tabرابطه خوبی نداره و نمی دونم چرا تو فرمهام TabIndex بالاترینم باشه بازم آخرین Object ای است که روش می ریم.


با تشکر

----------


## Davood_amega

> -تبدیل شمسی به میلادی تو PersianDate هست، با متد () ToDateTime. تبدیل میلادی به شمسی هم همینطور. یه constructor داره که DateTime می گیره. یعنی اگه مثلا می خواین SelectedDate تو PersianDatePicker یا PersianCalendar معادل یه تاریخ میلادی باشه:
> DateTime d=...;myDatePicker.SelectedDate=new PersianDate(d);اگه منظورتون چیز دیگه ای هست دقیق تر بگین لطفا.


عرض کنم که به چه صورتی DateTime هم شمسی می گیره و هم میلادی . متد ToDateTime مربوط به PersianDate هم فقط تاریخ شمسی را میاره !
اگه یهمثالی بذارید ممنون میشم .

----------


## arash.sahebolamri

> عرض کنم که به چه صورتی DateTime هم شمسی می گیره و هم میلادی . متد ToDateTime مربوط به PersianDate هم فقط تاریخ شمسی را میاره !
> اگه یهمثالی بذارید ممنون میشم .


DateTime که شمسی نمیگیره. اگه میخوای تاریخ شمسی رو میلادی کنی کافیه از همون متد ToDateTime تو PersianDate استفاده کنی که تاریخ میلادی بر می گردونه نه شمسی، یعنی DateTime بر می گردونه. 

            PersianDate myBirthDay = new PersianDate(1366, 9, 5);
            DateTime myGregorianBirthDay = myBirthDay.ToDateTime();

همینطور اگه میخوای معادل میلادی تاریخ شمسی انتخاب شده رو از PersianCalendar یا    PersianDatePicker  در بیاری :

DateTime d=persianDatePicker.SelectedDate.ToDateTime();

----------


## Davood_amega

ممنون در مورد  PersianDateControls شما هم یه تغییر کوچیک ایجاد کردم که  Datepicker کادرش بسته بشه ! قبلا وقتی تاریخ را انتخاب می کردیم کادر بسته نمی شد و باید یک جا کلیک می کردیم تا کادر بسته بشه !
اما همچنان مشکل TabIndex وجود داره .

----------


## arash.sahebolamri

مشکل tab و بسته نشدن popup رو درست کردم. تو فایل attach شده dll های اصلاح شده رو گذاشتم. هنوز تو CodeProject آپلودشون نکردم.

----------


## Davood_amega

ممنون خیلی عالی شد !
اگه بازم مشکلی دیدم آرش جان اطلاع میدم .

----------


## Davood_amega

یه نکته دیگه اینکه اگر بتونی Dll مربوط تبدیل تاریخ را یه کم دستکاری کنی فکر کنم خیلی بهتر بشه !
در فایل ضمیمه یک DLL کامل به نام FarsiLibrary را قرار دادم که فایل Help هم همراهش هست .

----------


## Davood_amega

ضمنا یه سوال دیگه برای تبدیل شمسی به میلادی و برعکس نمیشه رشته وارد کرد ؟
و اینکه تبدیل تاریخها صددرصد تست شده ؟

----------


## arash.sahebolamri

تاریخ ها رو از روز ازل تا ابد همه رو چک کردم.
برای رشته تاریخ شمسی از() PersianDate.Parse یا() PersiandDate.TryParse استفاده کن. مثل تبدیل string به int یا double یا DateTime.
برای رشته میلادی هم اول DateTime شون کن. بعد با ()new PersianDate به شمسی تبدیلشون کن.

----------


## Davood_amega

بنده می خوام یه رشته میلادی را به شمسی و یه رشته شمسی را به میلادی تبدیل کنم اما همچنان سر تبدیل مشکل دارم .
درمورد تبدیل شمسی به میلادی مشکلی نیست ولی برعکس مشکل دارم . فقط برای استفاده در بانک می خواهم که دیگهDLL دیگه ای برای تبدیل میلادی به شمسی استفاده نکنم .

----------


## arash.sahebolamri

> بنده می خوام یه رشته میلادی را به شمسی و یه رشته شمسی را به میلادی تبدیل کنم اما همچنان سر تبدیل مشکل دارم .
> درمورد تبدیل شمسی به میلادی مشکلی نیست ولی برعکس مشکل دارم . فقط برای استفاده در بانک می خواهم که دیگهDLL دیگه ای برای تبدیل میلادی به شمسی استفاده نکنم .


برای تبدیل رشته میلادی به شمسی:

string dateStr=...;
string persianDateStr= (new PersianDate(DateTime.Parse(dateStr))).ToString();

----------


## arash.sahebolamri

سلام دوستان.
نسخه جدید PersianCalendar رو تو Code Project گذاشتم. دوباره آدرسش اینه:

http://www.codeproject.com/KB/dateti...ateAndWpf.aspx

----------


## Davood_amega

آیا تغییر دیگری هم نسبت به اون فایلی که در همین سایت قرار داده بودی داشته !

----------


## arash.sahebolamri

> آیا تغییر دیگری هم نسبت به اون فایلی که در همین سایت قرار داده بودی داشته !


نمی دونم. فکر نکنم.

----------


## tk2005730

سلام دستت درد نکنه کنترل خوبی شده. فقط این قابلیت را هم بذار که کنترل بتونه خالی باشه یعنی هیچ تاریخی را انتخاب نکنیم.
ممنون

----------


## Elham.M

سلام بی زحمت اگه برای من هم بدی ممنون می شم آدرس ایمیلم Shekari.1740@gmail.com

----------


## آقای X

سلام و خسته نباشید 
یه سوال داشتم در مورد کنترل 
SelectDate این کنترل را باید باچه نوعی بایند کنم ؟
آخه با چندتا امتحان کردم کار نکرد 
البته با persiandate هم امتحان  کردم ولی خاصیت text اون تغییر نمی کرد 
من با wpf   و mvvm کار می کنم 
اگه یه مثال بدین ممنون میشم

----------


## Afshin160

سلام . از دوستانی که از این برنامه استفاده کردن یه سوال داشتم .؟
این Calendar را چطور بزرگ کردن ؟ 
اون Calendar که تو DatePicker میاد را می گم ؟

----------


## Sh.ehsan

سلام ببخشید مزاحمتون شدم بنده دنبال یه تقویم فارسی برای wpf هستم اگر میشه کمک کنین ممنونتون میشم

----------

