Saya ingin menggunakan format string bernama Tanggal Pendek di WPF.
Saya mencoba sesuatu seperti:
<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />
Bagaimana cara melakukannya?
Jawaban:
Coba ini:
<TextBlock Text="{Binding PropertyPath, StringFormat=d}" />
yang peka budaya dan membutuhkan .NET 3.5 SP1 atau lebih tinggi.
CATATAN: Ini peka huruf besar / kecil. "d" adalah penentu format tanggal pendek sedangkan "D" adalah penentu format tanggal panjang .
Ada daftar lengkap format string di halaman MSDN di Standard Date and Time Format Strings dan penjelasan lebih lengkap tentang semua opsi di posting blog MSDN ini
Namun, ada satu gotcha dengan ini - selalu menampilkan tanggal dalam format AS kecuali Anda mengatur sendiri budaya ke nilai yang benar.
Jika Anda tidak menyetel properti ini, mesin pengikat menggunakan properti Bahasa dari objek target pengikatan. Di XAML, defaultnya adalah "en-US" atau mewarisi nilai dari elemen root (atau elemen apa pun) halaman, jika telah ditetapkan secara eksplisit.
Salah satu cara untuk melakukan ini adalah di kode di belakang (dengan asumsi Anda telah mengatur budaya utas ke nilai yang benar):
this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
Cara lain adalah dengan mengatur budaya konverter dalam pengikatan:
<TextBlock Text="{Binding PropertyPath, StringFormat=d, ConverterCulture=en-GB}" />
Meskipun ini tidak memungkinkan Anda untuk melokalkan keluaran.
Atau gunakan ini untuk format bahasa Inggris (atau gabungkan untuk custom):
StringFormat='{}{0:dd/MM/yyyy}'
Gunakan StringFormat
properti (atau ContentStringFormat
pada ContentControl
dan turunannya, misalnya Label
).
<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />
Perhatikan bahwa {}
sebelum standar String.Format
argumen posisi, notasi memungkinkan tanda kurung di-escape dalam bahasa ekstensi markup.
{}
akan memungkinkan Anda untuk menggunakan StringFormat='{}Created Date:{0:d}'
yang sebaliknya akan menghasilkan hasil yang tidak terduga.
Beberapa contoh StringFormat DateTime menurut saya berguna. Diangkat dari Contoh 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
Perhatikan tanda kutip tunggal untuk format string. Ini tidak berhasil:
Content="{Binding PlannedDateTime, StringFormat={}{0:yy.MM.dd HH:mm}}"
sementara ini:
Content="{Binding PlannedDateTime, StringFormat='{}{0:yy.MM.dd HH:mm}'}"