Je voudrais utiliser le format de chaîne nommé Short Date dans WPF.
J'ai essayé quelque chose comme:
<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />
Comment faire cela?
Réponses:
Essaye ça:
<TextBlock Text="{Binding PropertyPath, StringFormat=d}" />
qui est sensible à la culture et nécessite .NET 3.5 SP1 ou supérieur.
REMARQUE: cela 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 des formats de chaîne sur la page MSDN sur les chaînes de format de date et d'heure standard et une explication plus complète de toutes les options de ce billet 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 sur la valeur correcte.
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 l'un a été défini explicitement.
Une façon de le faire est dans le code derrière (en supposant que vous avez défini la culture du thread sur 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.
Ou utilisez ceci pour un format anglais (ou mélangez-le pour un format personnalisé):
StringFormat='{}{0:dd/MM/yyyy}'
Utilisez la StringFormat
propriété (ou ContentStringFormat
sur ContentControl
et ses dérivés, par exemple Label
).
<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />
Notez que la notation {}
antérieure à l' String.Format
argument positionnel standard permet aux accolades d'être échappées dans le langage d'extension de balisage.
{}
vous permettra d'utiliser StringFormat='{}Created Date:{0:d}'
ce qui autrement produirait des résultats inattendus.
Quelques exemples de DateTime StringFormat que j'ai trouvés utiles. Tiré des 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
Tenez compte des guillemets simples pour le format de chaîne. Cela ne fonctionne pas:
Content="{Binding PlannedDateTime, StringFormat={}{0:yy.MM.dd HH:mm}}"
alors que cela fait:
Content="{Binding PlannedDateTime, StringFormat='{}{0:yy.MM.dd HH:mm}'}"