• 1399/11/24

راه حلی برای DateTimePicker :

کسی هست یک تقویم همراه با ساعت و فارسی بهم مهرفی کنه ؟ که بصورت 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"/>

توی خود کنترل اینا جدا هستند.. و از طرفی من این نقویم بازه زمانی رو داخل یک سطر دیتا گرید میخوام استفاده کنم اگه کل اینو داخل سطر بزارم خیلی داغون میشه اینجوری میشه

 

  • 1399/11/25
  • ساعت 01:11

سلام

پکیج  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; }
        }
    }

با آرزوی موفقیت


  • 1399/11/25
  • ساعت 01:28

خیلی ممنونم استاد ولی این persianToolKit هست من دارم استفاده میکنم 

https://github.com/ghost1372/PersianToolkit

اینم نوشته این کد از داخل handy controls هست

اگر کل پکیج Handy controls رو بریزم کل برنامه ام بهم نمیخوره؟؟ چون درحال حاضر از  material design استفاده کردم..


  • 1399/11/25
  • ساعت 01:48

پکیچ persianToolKit  رو از روی nuget برداشتن و توی توضیحاتش گفتن از Handy استفاده کنید.

https://www.nuget.org/packages/PersianToolkit#

The owner has unlisted this package.

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


  • 1399/11/25
  • ساعت 10:20

خیلی ممنونم استاد درست شد. نمیدونم چطوری تشکر کنم ...


  • 1399/11/25
  • ساعت 10:27

خواهش میکنم، موفق باشید.


logo-enamadlogo-samandehi