Я хотел бы использовать Short Date named string format в WPF.
Я пробовал что-то вроде:
<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />
Как это сделать?
Я хотел бы использовать Short Date named string format в WPF.
Я пробовал что-то вроде:
<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />
Как это сделать?
Попробуйте следующее:
<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}" />
Хотя это не позволяет вам локализовать вывод.
Или используйте это для английского (или смешайте его для пользовательского) формата:
StringFormat='{}{0:dd/MM/yyyy}'
Используйте свойство StringFormat
(или ContentStringFormat
on ContentControl
и его производные, например Label
).
<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />
Обратите внимание на {}
до стандартного нотации позиционного аргумента String.Format
позволяет скопировать брекеты на языке расширения разметки.
Некоторые примеры 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
Просто используйте:
<TextBlock Text="{Binding Date, StringFormat=\{0:d\}}" />
Если вы хотите добавить строку со значением, используйте это:
<TextBlock Text="{Binding Date, StringFormat= 'Date : {0:d}'}" />
Помните о одинарных кавычках для строкового формата. Это не работает:
Content="{Binding PlannedDateTime, StringFormat={}{0:yy.MM.dd HH:mm}}"
пока это происходит:
Content="{Binding PlannedDateTime, StringFormat='{}{0:yy.MM.dd HH:mm}'}"