WPF привязка StringFormat Short Date String

Я хотел бы использовать Short Date named string format в WPF.

Я пробовал что-то вроде:

<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />

Как это сделать?

Ответ 1

Попробуйте следующее:

<TextBlock Text="{Binding PropertyPath, StringFormat=d}" />

который чувствителен к культуре и требует .NET 3.5 SP1 или выше.

ПРИМЕЧАНИЕ. Это чувствительно к регистру. "d" - это спецификатор формата коротких дат, а "D" - long спецификатор формата даты.

Здесь есть полный список строковых форматов на странице это сообщение в блоге MSDN

Тем не менее, есть один вопрос с этим - он всегда выводит дату в формате США, если вы сами не настроите культуру на правильное значение.

Если вы не установите это свойство, механизм привязки использует свойство Язык целевого объекта привязки. В XAML это по умолчанию означает "en-US" или наследует значение от корневого элемента (или любого элемента) страницы, если он явно установлен.

Источник

Один из способов сделать это в коде позади (при условии, что вы настроили культуру потока на правильное значение):

this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);

Другой способ - установить культуру конвертера в привязке:

<TextBlock Text="{Binding PropertyPath, StringFormat=d, ConverterCulture=en-GB}" />

Хотя это не позволяет вам локализовать вывод.

Ответ 2

Или используйте это для английского (или смешайте его для пользовательского) формата:

StringFormat='{}{0:dd/MM/yyyy}'

Ответ 3

Используйте свойство StringFormat (или ContentStringFormat on ContentControl и его производные, например Label).

<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />

Обратите внимание на {} до стандартного нотации позиционного аргумента String.Format позволяет скопировать брекеты на языке расширения разметки.

Ответ 4

Некоторые примеры DateTime StringFormat, которые я нашел полезными. Поднято из примеров С#

DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123);

String.Format("{0:y yy yyy yyyy}", dt);  // "8 08 008 2008"   year
String.Format("{0:M MM MMM MMMM}", dt);  // "3 03 Mar March"  month
String.Format("{0:d dd ddd dddd}", dt);  // "9 09 Sun Sunday" day
String.Format("{0:h hh H HH}",     dt);  // "4 04 16 16"      hour 12/24
String.Format("{0:m mm}",          dt);  // "5 05"            minute
String.Format("{0:s ss}",          dt);  // "7 07"            second
String.Format("{0:f ff fff ffff}", dt);  // "1 12 123 1230"   sec.fraction
String.Format("{0:F FF FFF FFFF}", dt);  // "1 12 123 123"    without zeroes
String.Format("{0:t tt}",          dt);  // "P PM"            A.M. or P.M.
String.Format("{0:z zz zzz}",      dt);  // "-6 -06 -06:00"   time zone

Ответ 5

Просто используйте:

<TextBlock Text="{Binding Date, StringFormat=\{0:d\}}" />

Ответ 6

Если вы хотите добавить строку со значением, используйте это:

<TextBlock Text="{Binding Date, StringFormat= 'Date : {0:d}'}" />

Ответ 7

Помните о одинарных кавычках для строкового формата. Это не работает:

    Content="{Binding PlannedDateTime, StringFormat={}{0:yy.MM.dd HH:mm}}"

пока это происходит:

    Content="{Binding PlannedDateTime, StringFormat='{}{0:yy.MM.dd HH:mm}'}"