.net 在文本框中以d/mm格式输入日期

.net 在文本框中以d/mm格式输入日期,.net,windows-8,.net-4.5,cultureinfo,.net,Windows 8,.net 4.5,Cultureinfo,我已将一个文本框绑定到可为空的DateTime属性 我在澳大利亚,所以我希望日期以d/mm/yyyy格式显示 在我的Windows 7框中,我可以以d/mm格式输入日期,并且转换正确(例如1/11转换为11月1日,13/1转换为1月13日等) 在我的Windows 8框中,相同的输入被解释为美国格式,因此1/11转换为1月11日,13/1失败(因为没有第13个月) 两台计算机都设置为使用澳大利亚格式,我在Application.StartUp事件中有以下代码: FrameworkElement.

我已将一个文本框绑定到可为空的DateTime属性

我在澳大利亚,所以我希望日期以d/mm/yyyy格式显示

在我的Windows 7框中,我可以以d/mm格式输入日期,并且转换正确(例如1/11转换为11月1日,13/1转换为1月13日等)

在我的Windows 8框中,相同的输入被解释为美国格式,因此1/11转换为1月11日,13/1失败(因为没有第13个月)

两台计算机都设置为使用澳大利亚格式,我在Application.StartUp事件中有以下代码:

FrameworkElement.LanguageProperty.OverrideMetadata(GetType(FrameworkElement), New FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)))
绑定的StringFormat设置为d/MM/yyyy,我还通过将TextBlock绑定到StringFormat设置为d的同一属性(长日期格式,给出类似“2012年1月11日星期三”的值)来检查这是否正确

有人有什么想法吗


更新:进一步的调查(见下面的评论)表明,这似乎是一个问题,Windows 8上的en-AU文化与Windows 7不同,这意味着它在Windows 8上以mm/dd格式解释“1/11”等日期,而在Windows 7上则以dd/mm格式解释,这就是我在使用en-AU区域性时所期望的。

由于IetfLanguageTag已被弃用,您是否考虑过改用Name属性

:

IETF语言标记的格式类似于区域性名称 由Name属性返回,但不标识区域性 独特地也就是说,不同的文化共享相同的IETF语言标签 如果这些文化具有相同的语言特征

使用


将更新当前线程的月和日格式。Windows Server 2012中的
monthday模式已更改。我还没有弄清楚原因。

我尝试过的其他事情:在父窗口上设置
xml:lang=“en-AU”
,在绑定上设置
ConverterCulture=en-AU
。两者都不起作用。。。(绑定上没有转换器,但我想我还是会尝试一下)
DateTime.Parse(“1/11”,CultureInfo.GetCultureInfo(“en-AU”)。Month
在Windows 7上给出11,但在Windows 8上给出1-这不再是WPF错误…在Windows 8上:en-AU给出1,en-GB给出11,en-US给出1,fr给出了11个解决方案,您可以使用ValueConverter。这是单向绑定还是双向绑定?根据您的发现,您可能需要调整问题,尤其是标签。听起来我们澳大利亚人在Win8中的注册表项不好。使用
Name
而不是
IetfLanguageTag
没有区别,它们在Windows 7和Windows 8上都是一样的。(正如那一页所说:“IETF标签和名称是相同的。”)
System.Globalization.DateTimeFormatInfo.CurrentInfo.MonthDayPattern = "dd MMMM";