如何更改wpf datepicker区域性?

fbcarpbf  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(87)

我有一个WPF application on the dotnet core 7平台,在App class中,在OnStartup事件中,我更改了文化,如下所示:当我使用DatePicker时,当我点击date selection button时,它正确地向我显示波斯日历。但是,当我选择一个日期时,它会以波斯数字显示格里高利日期。当我点击页面顶部的年份来选择日期时,它会用波斯语向我显示格里高利历的月份。然后,当我再次点击时,它会显示格里高利年。我该怎么做才能解决这个问题?我附上了一个程序运行的示例图像。

protected override void OnStartup(StartupEventArgs e)
{
    CultureInfo cultureInfo = new CultureInfo("fa-IR");
    Thread.CurrentThread.CurrentCulture = cultureInfo;
    Thread.CurrentThread.CurrentUICulture = cultureInfo;

    FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
}
...
<StackPanel FlowDirection="RightToLeft" VerticalAlignment="Center" Margin="10,0,10,0" Height="209">
    <DatePicker />
...

tjjdgumg

tjjdgumg1#

我认为默认的DatePicker没有做到这一点,C#中的CultureInfo主要是为了提供有关各种文化方面的信息,如语言,货币,日期和时间格式等。但是,它本身并不支持在不同的日历系统之间进行转换,例如公历和贾拉利(波斯)日历。
要做到这一点,你需要使用一个组件,支持Jalali日历。互联网上有很多这样的东西:this
或者我认为你可以在选中CultureInfo Values后手动更改默认的月份名称,比如:

if (CultureInfo.CurrentCulture.Name == "fa-IR")
        {
            // Create a custom DateTimeFormatInfo with Persian month names
            DateTimeFormatInfo customFormat = new DateTimeFormatInfo();
            customFormat.MonthNames = new string[]
            {
                "فروردین", "اردیبهشت", "خرداد",
                "تیر", "مرداد", "شهریور",
                "مهر", "آبان", "آذر",
                "دی", "بهمن", "اسفند"
            };

            // Set the custom DateTimeFormatInfo as the format for the DatePicker
            datePicker.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);
            datePicker.LanguageSpecificResources = customFormat;
}

相关问题