2011-02-18 39 views

Respuesta

133

Prueba esto:

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

que es la cultura sensible y requiere .NET 3.5 SP1 o superior.

NOTA: Esto distingue entre mayúsculas y minúsculas. "d" es short date format specifier mientras que "D" es long date format specifier.

Hay una lista completa de formato de cadena en la MSDN page on Standard Date and Time Format Strings y una explicación más completa de todas las opciones en this MSDN blog post

Sin embargo, no es uno de gotcha con esto - es siempre imprime la fecha en formato de EE.UU. a menos que establezca la cultura al valor correcto usted mismo.

Si no se establece esta propiedad, el motor de enlace utiliza el lenguaje propiedad 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 explícitamente.

Source

Una forma de hacerlo es en el código subyacente (suponiendo que haya configurado la cultura de la rosca 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.

+0

¡Gracias! ¡Lo tienes! Cuando pregunté si tenía en mente cuál era el formato de cadena de fecha corta, dónde podría encontrar la lista de formatos de cadena, y también me gustó que respondiste con StringFormat = d. Muy claro y completo. – Tony

+0

¿Esto siempre muestra el formato de EE. UU. Independientemente de la configuración cultural? – CRice

+0

@CRice - sí lo hace - por alguna razón - usted mismo ha establecido la cultura. – ChrisF

4

sólo tiene que utilizar:

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

Utilice la propiedad StringFormat (o ContentStringFormat en ContentControl y sus derivados, por ejemplo Label).

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

Nota del {} antes de la String.Format notación posicional argumento estándar permite que los apoyos que se escaparon en el lenguaje de extensión de marcado.

+3

El '{}' le permitirá usar 'StringFormat = '{} Fecha de creación: {0: d}'' que de lo contrario produciría resultados inesperados. –

32

O utilizar esto para un Inglés (o mezclarlo para encargo) Formato:

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

También puede usar 'ConverterCulture =' en su enlace, que requiere un valor para indicar el formato. (ConverterCulture = 'en-GB' es Gran Bretaña). – else

1

Si desea agregar una cadena con el uso valor presente:

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

Algunas muestras DateTime StringFormat Me pareció útil.Levantado de C# Examples

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