W WPF 3.5SP1 używam ostatniej funkcji StringFormat w DataBindings:
<TextBlock Text="{Binding Path=Model.SelectedNoteBook.OriginalDate, StringFormat='f'}"
FontSize="20" TextTrimming="CharacterEllipsis" />
Problem, z którym się spotykam, polega na tym, że data jest zawsze sformatowana w języku angielskim ... chociaż mój system jest w języku francuskim? Jak mogę wymusić, aby data była zgodna z datą systemową?
wpf
datetime
localization
Pavel Anikhouski
źródło
źródło
Odpowiedzi:
Od tworzenia międzynarodowego kreatora w WPF
źródło
Zdefiniuj następującą przestrzeń nazw xml:
Teraz spójrz na tę fantastyczną poprawkę:
Zdaję sobie sprawę, że to nie jest globalna poprawka i będziesz jej potrzebować na każdym z Twoich powiązań, ale na pewno jest to po prostu dobry XAML? O ile mi wiadomo, następnym razem, gdy wiążąca aktualizacja użyje poprawnego
CultureInfo.CurrentCulture
lub tego, co dostarczyłeś.To rozwiązanie natychmiast zaktualizuje Twoje Bindings o poprawne wartości, ale wygląda na to, że zawiera dużo kodu dla czegoś tak rzadkiego i nieszkodliwego.
źródło
Chciałem tylko dodać, że odpowiedź loraderona działa świetnie w większości przypadków. Kiedy umieszczam następujący wiersz kodu w moim App.xaml.cs, daty w moich TextBlocks są formatowane w poprawnej kulturze.
Mówię `` w większości przypadków '', na przykład to zadziała po wyjęciu z pudełka:
... ale w przypadku używania Run w TextBlock DateTime jest formatowany w domyślnej kulturze.
Aby to zadziałało, potrzebowałem odpowiedzi Gusdora , a mianowicie dodania ConverterCulture = {x: Static gl: CultureInfo.CurrentCulture} do Binding.
Mam nadzieję, że ta dodatkowa odpowiedź komuś się przyda.
źródło
Po prostu wstaw skrót kultury do tagu najwyższego poziomu:
na przykład:
źródło
DatePicker
wykonał swoją pracę, więc ta łatwa poprawka szybko wracam na właściwe tory!Jak już wspomniano, XAML domyślnie przyjmuje niezmienną kulturę (en-US) i można użyć
aby ustawić kulturę na kulturę domyślną dla języka bieżącej kultury. Ale komentarz jest błędny; to jest nie używać aktualnej kultury, jak nie będzie widać żadnych dostosowań użytkownik może dokonane, to zawsze będzie domyślnym dla danego języka.
Aby faktycznie używać bieżącej kultury z dostosowaniami, musisz ustawić
ConverterCulture
razem zStringFormat
, jak wze
gl
zdefiniowaną jako globalną przestrzenią nazw w elemencie głównymźródło
binding.ConverterCulture = System.Globalization.CultureInfo.CurrentCulture;
Jeśli chcesz zmienić język, gdy program jest uruchomiony, możesz po prostu zmienić właściwość Język w elemencie głównym (nie jestem pewien, czy ma to natychmiastowy efekt, czy też element podrzędny musi zostać odtworzony, w moim przypadku działa to przynajmniej)
źródło
Pełny kod do zmiany lokalizacji również w elementach takich jak
<Run />
:źródło
Jeśli chcesz zmienić informacje o kulturze w czasie wykonywania, możesz użyć zachowania (patrz poniżej)
źródło
Jeśli pracujesz nad kodem, a nie XAML, możesz ustawić ConverterCulture w następujący sposób:
Uznanie dla @KZeise za wskazanie subtelnej różnicy między użyciem domyślnej definicji kultury a użyciem niestandardowej definicji kultury użytkownika.
źródło
Użyj etykiety (w tym Cultture), a nie texblock
źródło