web-dev-qa-db-fra.com

WPF Binding StringFormat Date String courte

Je voudrais utiliser le format de chaîne nommé Date courte dans WPF.

J'ai essayé quelque chose comme:

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

Comment faire ça?

82
Tony

Essaye ça:

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

qui est sensible à la culture et nécessite .NET 3.5 SP1 ou supérieur.

NOTE: Ceci est sensible à la casse. "d" est le spécificateur de format de date courte tandis que "D" est le spécificateur de format de date longue .

Il existe une liste complète du format de chaîne sur le page MSDN sur les chaînes de format de date et d'heure standard et une explication plus détaillée de toutes les options de cet article de blog MSDN

Cependant, il y a un problème avec cela: il affiche toujours la date au format américain, sauf si vous définissez vous-même la culture.

Si vous ne définissez pas cette propriété, le moteur de liaison utilise la propriété Language de l'objet cible de liaison. En XAML, la valeur par défaut est "en-US" ou hérite de la valeur de l'élément racine (ou de tout élément) de la page, si celle-ci a été définie explicitement.

Source

Une façon de faire cela est dans le code derrière (en supposant que vous définissiez la culture du thread à la valeur correcte):

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

L’autre méthode consiste à définir la culture du convertisseur dans la liaison:

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

Bien que cela ne vous permette pas de localiser la sortie.

161
ChrisF

Ou utilisez ceci pour un format anglais (ou mélangez-le pour un format personnalisé):

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

Utilisez la propriété StringFormat (ou ContentStringFormat sur ContentControl et ses dérivés, par exemple Label.).

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

Noter la {} avant la norme String.Format la notation d'argument de position permet aux accolades d'être échappées dans le langage d'extension de balisage.

23
user7116

Certains exemples DateTime StringFormat ont été utiles. Levé de exemples 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
8
Telos

Il suffit d'utiliser:

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

Si vous voulez ajouter une chaîne avec la valeur, utilisez ceci:

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