You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决.NET Core7 WPF DatePicker设置波斯文化后的显示异常?

解决WPF .NET Core 7中DatePicker波斯文化显示异常问题

问题分析

当前仅全局指定了波斯文化,但未明确让DatePicker及其内置日历控件绑定波斯日历逻辑,导致日期选择后仍以公历规则解析显示,年份选择器也出现公历内容混淆的情况。

解决方案

1. 修正全局文化配置(App.xaml.cs)

在OnStartup事件中,确保波斯文化实例明确关联波斯日历,覆盖默认的日期格式化规则:

protected override void OnStartup(StartupEventArgs e)
{
    var cultureInfo = new CultureInfo("fa-IR");
    // 强制指定日期格式使用波斯日历
    cultureInfo.DateTimeFormat.Calendar = new PersianCalendar();
    
    Thread.CurrentThread.CurrentCulture = cultureInfo;
    Thread.CurrentThread.CurrentUICulture = cultureInfo;

    FrameworkElement.LanguageProperty.OverrideMetadata(
        typeof(FrameworkElement),
        new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(cultureInfo.IetfLanguageTag)));
    
    base.OnStartup(e);
}

2. 配置DatePicker的日历与显示规则(XAML)

给DatePicker添加日历样式,明确指定使用波斯日历,并设置合适的日期显示格式:

<!-- 先添加System.Globalization命名空间 -->
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:cal="clr-namespace:System.Globalization;assembly=System.Runtime"
        Title="MainWindow" Height="450" Width="800">
    <StackPanel FlowDirection="RightToLeft" VerticalAlignment="Center" Margin="10,0,10,0" Height="209">
        <DatePicker SelectedDateFormat="Long">
            <DatePicker.CalendarStyle>
                <Style TargetType="Calendar">
                    <!-- 绑定波斯日历实例 -->
                    <Setter Property="Calendar" Value="{x:Static cal:PersianCalendar.Instance}"/>
                </Style>
            </DatePicker.CalendarStyle>
        </DatePicker>
    </StackPanel>
</Window>

若需要自定义日期显示格式,可将SelectedDateFormat设为Custom并指定StringFormat:

<DatePicker SelectedDateFormat="Custom" StringFormat="yyyy/MM/dd">
    <DatePicker.CalendarStyle>
        <Style TargetType="Calendar">
            <Setter Property="Calendar" Value="{x:Static cal:PersianCalendar.Instance}"/>
        </Style>
    </DatePicker.CalendarStyle>
</DatePicker>

效果验证

完成配置后:

  • 点击DatePicker弹出的日历面板将始终显示波斯历
  • 选择日期后,输入框会以波斯数字显示波斯历日期
  • 年份选择器将正确展示波斯语的波斯历月份与年份

内容的提问来源于stack exchange,提问作者Mohsen Saleh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:53:15