کسی هست یک تقویم همراه با ساعت و فارسی بهم مهرفی کنه ؟ که بصورت picker باشه اینو دارم ولی این نمیتونه ساعت DatePicker هست و DateTimePicker نیست.... من زمان رو هم میخوام
<controls:DatePicker Style="{StaticResource DatePickerExtend}"/>
درواقع میخوام وقتی روی تقویم Pick کلیک کردم این باز بشه.. راه حلی داره ؟
<pc:CalendarWithClock Name="ct" ShowConfirmButton="True"
pc:CalendarAttached.AMString="صبح"
pc:CalendarAttached.PMString="عصر"
pc:CalendarAttached.ClockConfirm="تایید"
Confirmed="CalendarWithClock_Confirmed" Margin="10"/>
توی خود کنترل اینا جدا هستند.. و از طرفی من این نقویم بازه زمانی رو داخل یک سطر دیتا گرید میخوام استفاده کنم اگه کل اینو داخل سطر بزارم خیلی داغون میشه اینجوری میشه
سلام
پکیج HandyControls شامل کلیه کامپوننت های سفارشی شده WPF به علاوه PersianDateTimePicker , PersianDatePicker , PersianCalendarWithClock و PersianCalendar می شود. برای پیاده سازی این توضیحات زیر را به ترتیب انجام دهید (شما باید از PersianDateTimePicker استفاده کنید) :
نصب پکیج:
Install-Package HandyControls
ابتدا در فایل App.xaml ریسورس ها را اضافه کنید :
<Application x:Class="ClockWpfExample.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:hc="https://handyorg.github.io/handycontrol"
StartupUri="DateTimePickerWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<hc:ThemeResources/>
<hc:Theme/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
سپس در صفحه مورد نظر خودتون از کامپوننت PersianDateTimePicker مانند کد زیر استفاده کنید :
<Window x:Class="ClockWpfExample.DateTimePickerWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:hc="https://handyorg.github.io/handycontrol"
mc:Ignorable="d"
Title="DateTimePickerWindow" Height="450" Width="800">
<StackPanel>
<hc:PersianDateTimePicker />
</StackPanel>
</Window>
البته برای نمایش تاریخ شمسی در برنامه خود می بایست از Culture فارسی استفاده کنید که بهتر است در ابتدای شروع پروژه داخل متد OnStartup فایل App.cs این کار را انجام دهید.
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
PersianCulture culture = new PersianCulture();
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
ConfigHelper.Instance.SetLang(culture.IetfLanguageTag);
base.OnStartup(e);
}
}
کلاس PersianCulture یک کلاس سفارشی شده برای Culture شمسی است که در ادامه برای شما قرار میدهم.
public class PersianCulture : CultureInfo
{
private readonly Calendar cal;
private readonly Calendar[] optionals;
public PersianCulture()
: this("fa-IR", true)
{
this.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
this.DateTimeFormat.LongDatePattern = "dddd d MMMM yyyy - HH:mm:ss";
this.DateTimeFormat.AMDesignator = "ق.ظ";
this.DateTimeFormat.PMDesignator = "ب.ظ";
}
public PersianCulture(string cultureName, bool useUserOverride)
: base(cultureName, useUserOverride)
{
//Temporary Value for cal.
cal = base.OptionalCalendars[0];
//populating new list of optional calendars.
var optionalCalendars = new List<Calendar>();
optionalCalendars.AddRange(base.OptionalCalendars);
optionalCalendars.Insert(0, new PersianCalendar());
Type formatType = typeof(DateTimeFormatInfo);
Type calendarType = typeof(Calendar);
PropertyInfo idProperty = calendarType.GetProperty("ID", BindingFlags.Instance | BindingFlags.NonPublic);
FieldInfo optionalCalendarfield = formatType.GetField("optionalCalendars",
BindingFlags.Instance | BindingFlags.NonPublic);
//populating new list of optional calendar ids
var newOptionalCalendarIDs = new Int32[optionalCalendars.Count];
for (int i = 0; i < newOptionalCalendarIDs.Length; i++)
newOptionalCalendarIDs[i] = (Int32)idProperty.GetValue(optionalCalendars[i], null);
optionalCalendarfield.SetValue(DateTimeFormat, newOptionalCalendarIDs);
optionals = optionalCalendars.ToArray();
cal = optionals[0];
DateTimeFormat.Calendar = optionals[0];
DateTimeFormat.MonthNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
DateTimeFormat.MonthGenitiveNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
DateTimeFormat.AbbreviatedMonthNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
DateTimeFormat.AbbreviatedMonthGenitiveNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
DateTimeFormat.AbbreviatedDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };
DateTimeFormat.ShortestDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };
DateTimeFormat.DayNames = new string[] { "یکشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };
DateTimeFormat.AMDesignator = "ق.ظ";
DateTimeFormat.PMDesignator = "ب.ظ";
DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
/*
DateTimeFormat.LongDatePattern = "yyyy/MM/dd";
DateTimeFormat.SetAllDateTimePatterns(new[] {"yyyy/MM/dd"}, 'd');
DateTimeFormat.SetAllDateTimePatterns(new[] {"dddd, dd MMMM yyyy"}, 'D');
DateTimeFormat.SetAllDateTimePatterns(new[] {"yyyy MMMM"}, 'y');
DateTimeFormat.SetAllDateTimePatterns(new[] {"yyyy MMMM"}, 'Y');
*/
}
public override Calendar Calendar
{
get { return cal; }
}
public override Calendar[] OptionalCalendars
{
get { return optionals; }
}
}
با آرزوی موفقیت
خیلی ممنونم استاد ولی این persianToolKit هست من دارم استفاده میکنم
https://github.com/ghost1372/PersianToolkit
اینم نوشته این کد از داخل handy controls هست
اگر کل پکیج Handy controls رو بریزم کل برنامه ام بهم نمیخوره؟؟ چون درحال حاضر از material design استفاده کردم..
پکیچ persianToolKit رو از روی nuget برداشتن و توی توضیحاتش گفتن از Handy استفاده کنید.
https://www.nuget.org/packages/PersianToolkit#
The owner has unlisted this package.
اینکه با متریال به مشکل میخوره یا نه رو چک نکردم. ولی شما بسته اش رو نصب کنید و فقط از DataTimePicker استفاده کنید.
خیلی ممنونم استاد درست شد. نمیدونم چطوری تشکر کنم ...
خواهش میکنم، موفق باشید.