Wpf IValueConverter对DateTime使用了错误的区域性
您好,下面的代码用于将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
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)));