Vorrei utilizzare il formato stringa denominato Data breve in WPF.
Ho provato qualcosa del tipo:
<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />
Come fare questo?
Risposte:
Prova questo:
<TextBlock Text="{Binding PropertyPath, StringFormat=d}" />
che è sensibile alle impostazioni cultura e richiede .NET 3.5 SP1 o versione successiva.
NOTA: fa distinzione tra maiuscole e minuscole. "d" è l' identificatore di formato della data breve mentre "D" è l' identificatore di formato della data lunga .
C'è un elenco completo del formato di stringa nella pagina MSDN sulle stringhe di formato di data e ora standard e una spiegazione più completa di tutte le opzioni in questo post del blog MSDN
Tuttavia, c'è un trucco con questo: restituisce sempre la data in formato USA a meno che tu non imposti la cultura sul valore corretto.
Se non si imposta questa proprietà, il motore di associazione utilizza la proprietà Language dell'oggetto di destinazione del collegamento. In XAML il valore predefinito è "en-US" o eredita il valore dall'elemento radice (o da qualsiasi elemento) della pagina, se impostato in modo esplicito.
Un modo per farlo è nel codice sottostante (supponendo che tu abbia impostato la cultura del thread sul valore corretto):
this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
L'altro modo è impostare la cultura del convertitore nell'associazione:
<TextBlock Text="{Binding PropertyPath, StringFormat=d, ConverterCulture=en-GB}" />
Anche se questo non ti consente di localizzare l'output.
Oppure usalo per un formato inglese (o mescolalo per personalizzato):
StringFormat='{}{0:dd/MM/yyyy}'
Usa la StringFormat
proprietà (o ContentStringFormat
su ContentControl
e le sue derivate, ad esempio Label
).
<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />
Notare che la notazione precedente all'argomento posizionale {}
standard String.Format
consente di eseguire l'escape delle parentesi graffe nel linguaggio di estensione del markup.
{}
consentiranno di utilizzare StringFormat='{}Created Date:{0:d}'
che altrimenti produrrebbe risultati inaspettati.
Alcuni esempi di DateTime StringFormat che ho trovato utili. Estratto da esempi in 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
Sii consapevole delle virgolette singole per il formato stringa. Questo non funziona:
Content="{Binding PlannedDateTime, StringFormat={}{0:yy.MM.dd HH:mm}}"
mentre questo fa:
Content="{Binding PlannedDateTime, StringFormat='{}{0:yy.MM.dd HH:mm}'}"