ฉันต้องการใช้รูปแบบสตริงชื่อวันที่สั้นใน WPF
ฉันลองทำสิ่งที่ชอบ:
<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />
ต้องทำอย่างไร?
ฉันต้องการใช้รูปแบบสตริงชื่อวันที่สั้นใน WPF
ฉันลองทำสิ่งที่ชอบ:
<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />
ต้องทำอย่างไร?
คำตอบ:
ลองสิ่งนี้:
<TextBlock Text="{Binding PropertyPath, StringFormat=d}" />
ซึ่งมีความอ่อนไหวทางวัฒนธรรมและต้องใช้. NET 3.5 SP1 ขึ้นไป
หมายเหตุ: นี่เป็นกรณีที่ละเอียดอ่อน "D" เป็นรูปแบบระบุวันที่สั้นในขณะที่ "D" เป็นรูปแบบระบุวันที่ที่ยาวนาน
มีรายการรูปแบบสตริงทั้งหมดในหน้า MSDN ใน Standard Date and Time Format Stringsและคำอธิบายที่สมบูรณ์ของตัวเลือกทั้งหมดในโพสต์บล็อก MSDN นี้
อย่างไรก็ตามมี gotcha อยู่หนึ่งรายการโดยจะแสดงวันที่ในรูปแบบ US เสมอเว้นแต่คุณจะตั้งค่าวัฒนธรรมให้ถูกต้องด้วยตัวคุณเอง
หากคุณไม่ได้ตั้งค่าคุณสมบัตินี้เอ็นจินการโยงจะใช้คุณสมบัติภาษาของอ็อบเจ็กต์เป้าหมายการโยง ใน XAML ค่าเริ่มต้นนี้จะเป็น "en-US" หรือสืบทอดค่าจากรูทอิลิเมนต์ (หรือองค์ประกอบใด ๆ ) ของเพจหากมีการตั้งค่าไว้อย่างชัดเจน
วิธีหนึ่งในการทำเช่นนี้คือในโค้ดด้านหลัง (สมมติว่าคุณได้ตั้งค่าวัฒนธรรมของเธรดเป็นค่าที่ถูกต้อง):
this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
อีกวิธีหนึ่งคือการตั้งค่าวัฒนธรรมตัวแปลงในการผูก:
<TextBlock Text="{Binding PropertyPath, StringFormat=d, ConverterCulture=en-GB}" />
แม้ว่าจะไม่อนุญาตให้คุณแปลเอาต์พุต
หรือใช้สิ่งนี้สำหรับรูปแบบภาษาอังกฤษ (หรือผสมเพื่อกำหนดเอง):
StringFormat='{}{0:dd/MM/yyyy}'
ใช้StringFormat
คุณสมบัติ (หรือContentStringFormat
บนContentControl
และอนุพันธ์ของมันเช่นLabel
)
<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />
หมายเหตุ{}
ก่อนหน้ารูปแบบString.Format
อาร์กิวเมนต์ตำแหน่งมาตรฐานอนุญาตให้ใช้เครื่องหมายวงเล็บในภาษาส่วนขยายมาร์กอัป
{}
จะช่วยให้คุณใช้StringFormat='{}Created Date:{0:d}'
ซึ่งจะก่อให้เกิดผลที่ไม่คาดคิด
ตัวอย่าง DateTime StringFormat ที่ฉันพบว่ามีประโยชน์ ยกมาจากตัวอย่าง 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
หากคุณต้องการเพิ่มสตริงที่มีค่าให้ใช้สิ่งนี้:
<TextBlock Text="{Binding Date, StringFormat= 'Date : {0:d}'}" />
ระวังเครื่องหมายคำพูดเดี่ยวสำหรับรูปแบบสตริง สิ่งนี้ใช้ไม่ได้:
Content="{Binding PlannedDateTime, StringFormat={}{0:yy.MM.dd HH:mm}}"
ในขณะที่สิ่งนี้:
Content="{Binding PlannedDateTime, StringFormat='{}{0:yy.MM.dd HH:mm}'}"
เพียงใช้:
<TextBlock Text="{Binding Date, StringFormat=\{0:d\}}" />