2012-11-04 57 views
10

我已將文本框綁定到可爲空的DateTime屬性。在文本框中以d/mm格式輸入日期

我在澳大利亞,所以我想以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日星期三'),這是正確的。

有沒有人有任何想法?

更新:進一步調查(見下文評論)顯示這似乎是與EN-AU文化是在Windows 8上的不同相對於Windows 7,這意味着它解釋日期,如「1/11」的問題在Windows 8上以mm/dd格式顯示,而在Windows 7上,它以dd/mm格式解釋它們,這是我在使用en-AU文化時所期望的。

+0

我試過的其他東西:在父窗口設置'xml:lang =「en-AU」',在綁定上設置'ConverterCulture = en-AU'。沒有工作......(綁定上沒有轉換器,但我想我會試試它) – Charles

+2

'DateTime.Parse(「1/11」,CultureInfo.GetCultureInfo(「en-AU」))。 Month'在Windows 7上有11個,但在Windows 8上有1個 - 這不是WPF錯誤... – Charles

+0

如果你用戶fr? – Paparazzi

回答

1

由於IetfLanguageTag已被棄用,您是否考慮過使用Name屬性?

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.ietflanguagetag.aspx

的IETF語言標記的格式類似於由Name屬性返回的區域性名稱 ,但不標識文化 唯一。也就是說,如果這些文化具有相同的語言特徵,則不同的文化共享相同的IETF語言標記 。

+0

使用'Name'而不是'IetfLanguageTag'沒有什麼區別,它們在Windows 7和Windows 8上都是一樣的。(正如該頁所述 - 「IETF標籤和名稱完全相同「。) – Charles

0

使用

System.Globalization.DateTimeFormatInfo.CurrentInfo.MonthDayPattern = "dd MMMM"; 

將更新您的當前線程的月份和日期的格式。在Windows Server 2012中更改了MonthDayPattern。我還沒有弄清楚爲什麼。