2012-11-04 4 views
10

Ho un controllo TextBox associato a una proprietà DateTime nullable.Inserimento della data nel formato d/mm in TextBox

Sono in Australia, quindi desidero le date presentate nel formato gg/mm/aaaa.

Sulla mia casella di Windows 7, che può entrare la data nel formato d/mm, ed è convertito correttamente (ad es. 1/11 converte al 1 ° novembre, 13/1 converte al 13 gennaio etc.)

Sul mio Windows 8, lo stesso input è interpretato come se fosse nel formato USA, quindi 1/11 convertito all'11 gennaio e 13/1 non riesce (poiché non c'è il 13 ° mese).

Entrambi i computer sono impostati per utilizzare i formati australiane, e ho questo codice nell'evento Application.StartUp:

FrameworkElement.LanguageProperty.OverrideMetadata(GetType(FrameworkElement), New FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))) 

StringFormat del Binding è impostato su d/MM/yyyy, e ho controllato che ciò sia corretto anche legando un TextBlock alla stessa proprietà che ha il suo StringFormat impostato su D (il formato di data lunga, che fornisce valori come "mercoledì 11 gennaio 2012").

Qualcuno ha qualche idea?

Aggiornamento: Ulteriori indagini (vedere i commenti di seguito) rivela che questo sembra essere un problema con la cultura en-AU che è diversa su Windows 8 rispetto a Windows 7, il che significa che interpreta date come '1/11' in formato mm/dd su Windows 8, mentre su Windows 7, li interpreta in formato dd/mm, che è quello che mi aspetterei quando utilizzo la cultura en-AU.

+0

Altre cose che ho provato: impostazione 'xml: lang =" en-AU "' sulla finestra principale, impostazione 'ConverterCulture = en-AU' sul Binding. Nessuno dei due ha funzionato ... (non c'è un convertitore su Binding, ma ho pensato di provarlo lo stesso) – Charles

+2

'DateTime.Parse (" 1/11 ", CultureInfo.GetCultureInfo (" en-AU ")). Month' restituisce 11 su Windows 7, ma 1 su Windows 8 - questo non è più un bug WPF ... – Charles

+0

E se l'utente fr? – Paparazzi

risposta

1

Poiché IetfLanguageTag è deprecato, hai preso in considerazione l'utilizzo della proprietà Nome invece?

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

Il formato di un tag di lingua IETF è simile al nome della cultura restituito dalla proprietà nome, ma non identifica una cultura unico. Cioè, culture diverse condividono lo stesso tag linguaggio IETF se tali culture hanno caratteristiche linguistiche identiche.

+0

Utilizzare 'Name' invece di' IetfLanguageTag' non fa alcuna differenza, sono gli stessi, sia su Windows 7 sia su Windows 8. (Come dice quella pagina - "I tag IETF e nomi sono identici . ") – Charles

0

Utilizzando

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

Aggiornerà formato mese e giorno del thread corrente. Il MonthDayPattern è stato modificato in Windows Server 2012. Non ho ancora capito perché.