Wpf IValueConverter对DateTime使用了错误的区域性

Wpf IValueConverter对DateTime使用了错误的区域性,wpf,datetime,ivalueconverter,Wpf,Datetime,Ivalueconverter,您好,下面的代码用于将DateTime格式转换为当前线程区域性格式 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value is DateTimeOffset?) { var dto = (DateTimeOffset?)value; return dto.Valu

您好,下面的代码用于将DateTime格式转换为当前线程区域性格式

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    if (value is DateTimeOffset?)
    {
      var dto = (DateTimeOffset?)value;
      return dto.Value.ToString("t", culture);
    }
    return null;
}
但是区域性参数中的DateTimeFormat没有更新为当前系统的datetime格式,而是在短时间内使用固定格式,如HH:mm tt

解决方法是如下所示从当前线程设置语言,我们在App.Xaml中已经完成了这项工作,但DateTimeFormat仍将使用默认格式

//修复特定于区域性的绑定格式。请参阅此链接:

我已经浏览了一些关于这个的博客,看起来这是WPF中的一个bug。有些人建议DateTime不要依赖于区域性,因为DateTimePicker应该将选定的日期格式化为本地线程区域性。如果我们删除ToString()中的区域性参数,这将很好地工作


请为此提供您的建议或解决方案:)

也许您还需要在WPF控件上设置语言

(也在App.xaml.cs中)


请向我们展示您的xaml,您是否在转换器中设置了断点?输入输出和预期输出是什么?我已经设置了断点。输入参数中的区域性将具有“en-US”区域性,ShotTimeFormat将为“hh:mm tt”,即使系统中设置的格式为“tt-hh:mm”,但如果我们在“system.Globalization.CultureInfo.CurrentCulture”中看到,它将反映正确的日期时间格式。Xaml是这样的,感谢您的回复,但它不适用于这一行代码,在控制级别,格式与系统设置一致。仍然无法理解convert方法中的“culture”参数未更新的原因。
this.Language = System.Windows.Markup.XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.IetfLanguageTag);
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));