Chciałbym użyć formatu ciągu o nazwie Short Date w WPF.
Próbowałem czegoś takiego:
<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />
Jak to zrobić?
Spróbuj tego:
<TextBlock Text="{Binding PropertyPath, StringFormat=d}" />
który jest wrażliwy na kulturę i wymaga .NET 3.5 SP1 lub nowszego.
UWAGA: Rozróżniana jest wielkość liter. „d” to specyfikator formatu daty krótkiej, a „D” to specyfikator formatu daty długiej .
Pełna lista formatów ciągów znajduje się na stronie MSDN w standardowych ciągach formatu daty i godziny oraz pełniejsze wyjaśnienie wszystkich opcji w tym wpisie na blogu MSDN
Jest jednak jeden problem - zawsze wyświetla datę w formacie amerykańskim, chyba że sam ustawisz kulturę na poprawną wartość.
Jeśli ta właściwość nie zostanie ustawiona, aparat powiązań użyje właściwości Language obiektu docelowego powiązania. W języku XAML jest to domyślnie „en-US” lub dziedziczy wartość z elementu głównego (lub dowolnego elementu) strony, jeśli został jawnie ustawiony.
Można to zrobić w kodzie (zakładając, że ustawiłeś kulturę wątku na poprawną wartość):
this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
Innym sposobem jest ustawienie kultury konwertera w powiązaniu:
<TextBlock Text="{Binding PropertyPath, StringFormat=d, ConverterCulture=en-GB}" />
Chociaż nie pozwala to na zlokalizowanie wyjścia.
Lub użyj tego dla formatu angielskiego (lub wymieszaj go dla niestandardowego):
źródło
Użyj
StringFormat
właściwości (lubContentStringFormat
naContentControl
i jej pochodnych, npLabel
.).<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />
Zwróć uwagę, że notacja
{}
poprzedzająca standardowąString.Format
notację argumentów pozycyjnych pozwala na ucieczkę nawiasów klamrowych w języku rozszerzenia znaczników.źródło
{}
Będzie można używaćStringFormat='{}Created Date:{0:d}'
które w przeciwnym razie byłyby nieoczekiwane rezultaty.Niektóre przykłady DateTime StringFormat, które uznałem za przydatne. Zaczerpnięte z przykładów C #
źródło
Jeśli chcesz dodać ciąg z wartością, użyj tego:
<TextBlock Text="{Binding Date, StringFormat= 'Date : {0:d}'}" />
źródło
Zwróć uwagę na pojedyncze cudzysłowy dla formatu ciągu. To nie działa:
podczas gdy to robi:
źródło
Po prostu użyj:
<TextBlock Text="{Binding Date, StringFormat=\{0:d\}}" />
źródło