Me gustaría usar el formato de cadena con nombre Short Date en WPF.
Intenté algo como:
<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />
¿Como hacer esto?
Respuestas:
Prueba esto:
<TextBlock Text="{Binding PropertyPath, StringFormat=d}" />
que es sensible a la cultura y requiere .NET 3.5 SP1 o superior.
NOTA: Esto distingue entre mayúsculas y minúsculas. "d" es el especificador de formato de fecha corta, mientras que "D" es el especificador de formato de fecha larga .
Hay una lista completa de formato de cadena en la página de MSDN sobre cadenas de formato de fecha y hora estándar y una explicación más completa de todas las opciones en esta publicación de blog de MSDN
Sin embargo, hay un problema con esto: siempre genera la fecha en formato de EE. UU. A menos que usted mismo establezca la cultura en el valor correcto.
Si no establece esta propiedad, el motor de enlace usa la propiedad Language del objeto de destino de enlace. En XAML, este valor predeterminado es "en-US" o hereda el valor del elemento raíz (o cualquier elemento) de la página, si se ha establecido uno explícitamente.
Una forma de hacer esto es en el código subyacente (suponiendo que haya configurado la cultura del hilo en el valor correcto):
this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
La otra forma es establecer la cultura del convertidor en el enlace:
<TextBlock Text="{Binding PropertyPath, StringFormat=d, ConverterCulture=en-GB}" />
Aunque esto no le permite localizar la salida.
O use esto para un formato en inglés (o mezcle para personalizar):
StringFormat='{}{0:dd/MM/yyyy}'
Utilice la StringFormat
propiedad (o ContentStringFormat
sobre ContentControl
y sus derivados, por ejemplo Label
).
<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />
Tenga en cuenta que {}
antes de la String.Format
notación de argumentos posicionales estándar permite que las llaves se escapen en el lenguaje de extensión de marcado.
{}
le permitirá usar lo StringFormat='{}Created Date:{0:d}'
que de otra manera produciría resultados inesperados.
Algunas muestras de DateTime StringFormat que encontré útiles. Extraído de ejemplos de 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
Tenga en cuenta las comillas simples para el formato de cadena. Esto no funciona:
Content="{Binding PlannedDateTime, StringFormat={}{0:yy.MM.dd HH:mm}}"
mientras esto hace:
Content="{Binding PlannedDateTime, StringFormat='{}{0:yy.MM.dd HH:mm}'}"