2012-11-04 10 views
10

Mam pole TextBox powiązane z właściwością DateTime podlegającą zerowaniu.Wprowadzanie daty w formacie d/mm w TextBox

Jestem w Australii, więc chcę dat przedstawionych w formacie d/mm/rrrr.

Na moim Windows 7 polu można wprowadzić datę w formacie d/mm, a to przeliczone prawidłowo (np. 1/11 konwertuje do 1 listopada, 13/1 konwertuje do 13 stycznia etc.)

W moim Windows 8 to samo wejście jest interpretowane tak, jakby było w formacie amerykańskim, więc 1/11 konwertuje na 11 stycznia, a 13/1 kończy się niepowodzeniem (ponieważ nie ma 13 miesiąca).

Oba komputery są skonfigurowane do korzystania z australijskich formatów i mam ten kod w zdarzeniu Application.StartUp:

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

StringFormat Oprawa jest ustawiony na D/mm/rrrr, a ja sprawdziłem że jest to poprawne, wiążąc także TextBlock z tą samą właściwością, która ma ustawiony StringFormat na D (format długiej daty, który daje wartości takie jak "Środa, 11 stycznia, 2012").

Czy ktoś ma jakieś pomysły?

Aktualizacja: Dalsze badania (patrz komentarz poniżej) wynika, wydaje się to być problem z kultury en-AU inności na Windows 8 w porównaniu do Windows 7, co oznacza, że ​​interpretuje termin jak „1/11” w formacie mm/dd w systemie Windows 8, podczas gdy w systemie Windows 7 interpretuje je w formacie dd/mm, czego oczekiwałbym, używając kultury en-AU.

+0

Inne rzeczy, które wypróbowałem: ustawienie 'xml: lang =" en-AU "' w oknie macierzystym, ustawienie 'ConverterCulture = en-AU' na bindowaniu. Żaden nie działał ... (nie ma konwertera na Binding, ale pomyślałem, że i tak spróbuję) – Charles

+2

'DateTime.Parse (" 1/11 ", CultureInfo.GetCultureInfo (" en-AU ")). Month' daje 11 na Windows 7, ale 1 na Windows 8 - to już nie jest błąd WPF ... – Charles

+0

Co jeśli użytkownik fr? – Paparazzi

Odpowiedz

1

Ponieważ atrybut IetfLanguageTag jest nieaktualny, czy rozważałeś zamiast tego użycie właściwości Name?

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

Format znacznika IETF języka jest podobna do nazwy hodowli zwracany przez właściwość Name, ale nie identyfikuje kulturę jednoznacznie. Oznacza to, że różne kultury mają ten sam znacznik języka IETF, jeśli te kultury mają identyczne cechy językowe.

+0

Używanie 'Nazwa' zamiast' IetfLanguageTag' nie ma znaczenia, są one takie same, zarówno w Windows 7, jak i Windows 8. (Jak mówi ta strona - "Tagi i nazwy IETF są identyczne . ") – Charles

0

Korzystanie

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

zaktualizuje miesiąc i dzień sformatować bieżącego wątku. Zmieniono MonthDayPattern w systemie Windows Server 2012. Nie mam pojęcia, dlaczego jeszcze.

Powiązane problemy