2012-11-04 10 views
10

null可能なDateTimeプロパティにTextBoxをバインドしました。日付をd/mm形式でTextBoxに入力する

私はオーストラリアにいるので、日付はd/mm/yyyy形式で表示します。私のWindows 7のボックスで

が、私はD/MM形式で日付を入力することができ、それが正しく変換されます

(例えば1/11は、11月1日に変換し、13/1は、1月13日などに変換します)私のWindows 8のボックスでは、同じ入力がUS形式であるかのように解釈されるため、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をDに設定されたStringFormat( 'Wednesday、11 January、2012'のような値を持つ長い日付形式)を持つ同じプロパティにバインドすることによっても正しいことを意味します。

誰にもアイデアはありますか?

更新:更なる調査(以下のコメントを参照)は、これがWindows 7と比較してWindows 8で異なるen-AUカルチャの問題であることを明らかにしています。つまり、 '1/11' Windows 8ではmm/dd形式で、Windows 7ではd-d/mm形式で解釈します。これはen-AUカルチャを使用するときに期待されるものです。

+0

私が試したその他のこと:親ウィンドウに 'xml:lang =" en-AU "を設定し、バインディングに' ConverterCulture = en-AU'を設定してください。どちらもうまくいきませんでした...(バインディングにコンバーターはありませんが、とにかく試してみました) – Charles

+2

'DateTime.Parse(" 1/11 "、CultureInfo.GetCultureInfo(" en-AU "))。月はWindows 7では11を返しますが、Windows 8では1になります - これはWPFのバグではありません。 – Charles

+0

あなたはユーザーですか? – Paparazzi

答えて

1

IetfLanguageTagは廃止予定ですので、代わりにNameプロパティを使用することを検討しましたか?

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

IETF言語タグの形式は、Nameプロパティによって返さ培養名 に類似しているが、一意培養 を識別しません。つまり、異文化が同一の言語特性を持っている場合は、同じIETF言語タグ を共有します。

+0

'IetfLanguageTag'の代わりに' Name'を使うと違いはありません.Windows 7とWindows 8の両方で違いはありません(そのページには - "IETFタグと名前は同じです") – Charles

0

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

を使用すると、現在のスレッドの月と日の形式を更新します。 MonthDayPatternがWindows Server 2012で変更されました。なぜ私はまだその理由を理解していません。