WPF Binding StringFormat Short Date String - PullRequest
       1

WPF Binding StringFormat Short Date String

79 голосов
/ 18 февраля 2011

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

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

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

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

Ответы [ 6 ]

159 голосов
/ 18 февраля 2011

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

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

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

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

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

Однако с этим есть одна ошибка - она ​​всегда выводит дату в американском формате, если вы сами не установите правильное значение для культуры.

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

Источник

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

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

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

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

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

41 голосов
/ 04 сентября 2012

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

StringFormat='{}{0:dd/MM/yyyy}'
22 голосов
/ 19 февраля 2011

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

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

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

8 голосов
/ 13 февраля 2018

Некоторые примеры 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
4 голосов
/ 18 февраля 2011

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

<TextBlock Text="{Binding Date, StringFormat=\{0:d\}}" />
3 голосов
/ 02 апреля 2017

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

<TextBlock Text="{Binding Date, StringFormat= 'Date : {0:d}'}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...