Antworten:
Versuche dies:
<TextBlock Text="{Binding PropertyPath, StringFormat=d}" />
Dies ist kulturempfindlich und erfordert .NET 3.5 SP1 oder höher.
HINWEIS: Hierbei wird zwischen Groß- und Kleinschreibung unterschieden. "d" ist der kurze Datumsformatbezeichner, während "D" der lange Datumsformatbezeichner ist .
Auf der MSDN-Seite unter Standardzeichenfolgen für Datums- und Zeitformat finden Sie eine vollständige Liste des Zeichenfolgenformats sowie eine ausführlichere Erläuterung aller Optionen in diesem MSDN-Blogbeitrag
Es gibt jedoch ein Problem: Es gibt das Datum immer im US-Format aus, es sei denn, Sie stellen die Kultur selbst auf den richtigen Wert ein.
Wenn Sie diese Eigenschaft nicht festlegen, verwendet die Bindungs-Engine die Language- Eigenschaft des Bindungszielobjekts. In XAML ist dies standardmäßig "en-US" oder erbt den Wert vom Stammelement (oder einem beliebigen Element) der Seite, sofern eines explizit festgelegt wurde.
Eine Möglichkeit, dies zu tun, ist der Code dahinter (vorausgesetzt, Sie haben die Kultur des Threads auf den richtigen Wert eingestellt):
this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
Der andere Weg besteht darin, die Konverterkultur in die Bindung zu setzen:
<TextBlock Text="{Binding PropertyPath, StringFormat=d, ConverterCulture=en-GB}" />
Auf diese Weise können Sie die Ausgabe jedoch nicht lokalisieren.
Oder verwenden Sie dies für ein englisches Format (oder mischen Sie es für ein benutzerdefiniertes Format):
StringFormat='{}{0:dd/MM/yyyy}'
Verwenden Sie die StringFormat
Eigenschaft (oder ContentStringFormat
on ContentControl
und seine Derivate, z Label
. B. ).
<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />
Beachten Sie, dass {}
vor der Standardnotation für String.Format
Positionsargumente die Klammern in der Sprache der Markup-Erweiterung maskiert werden können.
{}
ermöglicht es Ihnen , zu verwenden , StringFormat='{}Created Date:{0:d}'
die sonst zu unerwarteten Ergebnissen führen würde.
Einige DateTime StringFormat-Beispiele, die ich nützlich fand. Aus C # -Beispielen herausgehoben
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
Beachten Sie die einfachen Anführungszeichen für das Zeichenfolgenformat. Das funktioniert nicht:
Content="{Binding PlannedDateTime, StringFormat={}{0:yy.MM.dd HH:mm}}"
während dies tut:
Content="{Binding PlannedDateTime, StringFormat='{}{0:yy.MM.dd HH:mm}'}"