WPF'de Kısa Tarih adlı dize biçimi kullanmak istiyorum.
Şöyle bir şey denedim:
<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />
Bu nasıl yapılır?
Yanıtlar:
Bunu dene:
<TextBlock Text="{Binding PropertyPath, StringFormat=d}" />
Kültüre duyarlıdır ve .NET 3.5 SP1 veya üstünü gerektirir.
NOT: Bu, büyük / küçük harfe duyarlıdır. "d" kısa tarih biçimi belirticisi , "D" ise uzun tarih biçimi belirticisi .
Standart Tarih ve Saat Biçimi Dizelerindeki MSDN sayfasında tam bir dize biçimi listesi ve bu MSDN blog gönderisindeki tüm seçeneklerin daha kapsamlı bir açıklaması bulunmaktadır.
Bununla birlikte, bununla ilgili bir sorun var - kültürü kendiniz doğru değere ayarlamadığınız sürece tarihi her zaman ABD formatında çıkarır.
Bu özelliği ayarlamazsanız, bağlama motoru bağlama hedef nesnesinin Language özelliğini kullanır . XAML'de bu, varsayılan olarak "en-US" olur veya açıkça ayarlanmışsa, sayfanın kök öğesinden (veya herhangi bir öğesinden) değeri devralır.
Bunu yapmanın bir yolu arkasındaki koddadır (iş parçacığının kültürünü doğru değere ayarladığınızı varsayarak):
this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
Diğer bir yol, dönüştürücü kültürünü bağlamada ayarlamaktır:
<TextBlock Text="{Binding PropertyPath, StringFormat=d, ConverterCulture=en-GB}" />
Bu çıktıyı yerelleştirmenize izin vermez.
Veya bunu bir İngilizce format için kullanın (veya özel olarak karıştırın):
StringFormat='{}{0:dd/MM/yyyy}'
StringFormat
Mülkü kullanın (veya ContentStringFormat
üzerinde ContentControl
ve türevlerini, örneğin Label
).
<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />
Not {}
standart öncesinde String.Format
pozisyonel argüman gösterimde parantez biçimlendirme uzantısı dilinde çıkış yapılmasını sağlar.
{}
Kullanmak sağlayacak StringFormat='{}Created Date:{0:d}'
aksi beklenmeyen sonuçlar üretecektir hangi.
Yararlı bulduğum bazı DateTime StringFormat örnekleri. C # Örneklerinden Kaldırıldı
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
Dize biçimi için tek tırnakların farkında olun. Bu çalışmıyor:
Content="{Binding PlannedDateTime, StringFormat={}{0:yy.MM.dd HH:mm}}"
bu ise:
Content="{Binding PlannedDateTime, StringFormat='{}{0:yy.MM.dd HH:mm}'}"