IValueConverter在DateTime中使用了错误的区域性

问题描述

嗨,下面的代码用于将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)));

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...