Tôi muốn sử dụng định dạng chuỗi có tên Ngày ngắn trong WPF.
Tôi đã thử một cái gì đó như:
<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />
làm như thế nào?
Câu trả lời:
Thử đi:
<TextBlock Text="{Binding PropertyPath, StringFormat=d}" />
nhạy cảm với văn hóa và yêu cầu .NET 3.5 SP1 trở lên.
LƯU Ý: Đây là trường hợp nhạy cảm. "d" là định dạng ngày ngắn trong khi "D" là định dạng ngày dài .
Có danh sách đầy đủ các định dạng chuỗi trên trang MSDN trên Chuỗi định dạng ngày và giờ chuẩn và giải thích đầy đủ hơn về tất cả các tùy chọn trên bài đăng blog MSDN này
Tuy nhiên, có một điểm khó hiểu với điều này - nó luôn xuất ra ngày ở định dạng Hoa Kỳ trừ khi bạn tự đặt văn hóa thành giá trị chính xác.
Nếu bạn không đặt thuộc tính này, công cụ liên kết sẽ sử dụng thuộc tính Ngôn ngữ của đối tượng đích ràng buộc. Trong XAML, giá trị này được mặc định là "en-US" hoặc kế thừa giá trị từ phần tử gốc (hoặc bất kỳ phần tử nào) của trang, nếu một phần tử đã được đặt rõ ràng.
Một cách để làm điều này là trong đoạn mã phía sau (giả sử bạn đã đặt văn hóa của chuỗi thành giá trị chính xác):
this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
Cách khác là đặt văn hóa bộ chuyển đổi trong ràng buộc:
<TextBlock Text="{Binding PropertyPath, StringFormat=d, ConverterCulture=en-GB}" />
Mặc dù điều này không cho phép bạn bản địa hóa đầu ra.
Hoặc sử dụng cái này cho định dạng tiếng Anh (hoặc trộn nó cho tùy chỉnh):
StringFormat='{}{0:dd/MM/yyyy}'
Sử dụng thuộc StringFormat
tính (hoặc ContentStringFormat
trên ContentControl
và các dẫn xuất của nó, ví dụ Label
).
<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />
Lưu ý rằng ký hiệu trước đối số vị trí {}
tiêu chuẩn String.Format
cho phép dấu ngoặc nhọn được thoát trong ngôn ngữ mở rộng đánh dấu.
{}
sẽ cho phép bạn sử dụng StringFormat='{}Created Date:{0:d}'
mà nếu không sẽ tạo ra kết quả bất ngờ.
Một số mẫu DateTime StringFormat mà tôi thấy hữu ích. Nâng cao từ các ví dụ 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
Hãy lưu ý đến các dấu ngoặc kép cho định dạng chuỗi. Điều này không hoạt động:
Content="{Binding PlannedDateTime, StringFormat={}{0:yy.MM.dd HH:mm}}"
trong khi điều này thực hiện:
Content="{Binding PlannedDateTime, StringFormat='{}{0:yy.MM.dd HH:mm}'}"