使用 stringformat=0:d 时 WPF 应用程序自定义 shortdate
Posted
技术标签:
【中文标题】使用 stringformat=0:d 时 WPF 应用程序自定义 shortdate【英文标题】:WPF application customize shortdate when using stringformat=0:d使用 stringformat=0:d 时 WPF 应用程序自定义 shortdate 【发布时间】:2012-12-05 09:53:57 【问题描述】:我们正在尝试允许应用在运行时设置其文化,并可选择覆盖日期的显示方式。
我们通过以下方式创造自己的文化:
private CultureInfo CreateCulture()
// start with basic culture object
CultureInfo culture = Sys.Workspace.ServerProperties.UICulture ?? new CultureInfo(Properties.Settings.Default.DefaultCulture);
// override data format
var dateFmt = Sys.Workspace.ServerProperties.DateFormatOverride;
if (!string.IsNullOrEmpty(dateFmt))
culture.DateTimeFormat.ShortDatePattern = dateFmt;
culture.DateTimeFormat.LongDatePattern = dateFmt;
if (dateFmt.Contains("/")) culture.DateTimeFormat.DateSeparator = "/";
if (dateFmt.Contains("-")) culture.DateTimeFormat.DateSeparator = "-";
return culture;
然后在应用程序的初始化中我们这样做:
var culture = CreateCulture();
// set ui culture
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = culture;
// set WPF culture
LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(culture.IetfLanguageTag)));
我们将“Sys.Workspace.ServerProperties.DateFormatOverride”值设置为“dd-MMM-yyyy”。不过,绑定似乎并不尊重这一点。例如:
<TextBlock TextAlignment="Center" HorizontalAlignment="Stretch"
Text="Binding NoteDate, StringFormat=0:d" />
NoteDate 是 DataColumn
,类型为 DateTime
,但显示默认区域性短日期模式。
如果我将主要文化设置为 en-GB,我将获得 dd-mm-yyyy,如果我将其设置为 en-US,我将获得 mm-dd-yyyy。
当我查看Thread.CurrentThread.CurrentCulture
和 currentUICulture 时,它设置正确,即它是 en-gb,shortdatepattern 和 longdatepattern 是 dd-MMM-yyyy,但日期不以这种格式显示。
【问题讨论】:
【参考方案1】:原因是 FrameworkElement 没有查看 Thread.CurrentThread.CurrentCulture 来获取全球化信息。
相反,您必须为 XAML 元素手动定义区域性...
Answered here
【讨论】:
该死的女士,这太恶心了。最后,我为每个绑定添加了一个 datetimeconverter,这样至少它只在一个时间点完成。 但是LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(culture.IetfLanguageTag)));
涵盖了这一点,不是吗?以上是关于使用 stringformat=0:d 时 WPF 应用程序自定义 shortdate的主要内容,如果未能解决你的问题,请参考以下文章