WPF Binding StringFormat короткая строка даты


Я хотел бы использовать короткий формат строки с именем даты в WPF.

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

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

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

6 73

6 ответов:

попробуйте это:

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

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

Примечание: это чувствительно к регистру. "d" - это спецификатор формата короткой даты в то время как "D" - это длинный спецификатор формата даты.

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

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

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

источник

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

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

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

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

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

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

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

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

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

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

просто использовать:

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

некоторые образцы datetime StringFormat я нашел полезными. Снято с Примеры C#

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

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

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