问题描述
嗨,下面的代码用于将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不会更新为当前系统日期时间格式,而是在短时间内使用固定格式,例如HH:mm tt。
为此,工作方法是从当前线程设置语言,如下所示,这是我们在App.Xaml中完成的操作,但DateTimeFormat仍具有默认格式。
//修复了特定于文化的绑定格式。查看此链接:WPF Binding StringFormat Short Date String
this.Language = System.Windows.Markup.XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.IetfLanguageTag);
我已经浏览了一些博客,看起来像是WPF中的错误。有些人建议不要依赖于DateTime的区域性,因为DateTimePicker应该将选定的日期格式化为本地线程区域性。如果我们在ToString()中删除区域性参数,则效果很好。
请为此提供您的建议或解决方案:)
解决方法
也许您还需要在WPF控件上设置语言
(也在App.xaml.cs中)
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));