Chuỗi ngày ngắn WPF Binding StringFormat


88

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:


176

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.

Nguồn

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.


Cảm ơn bạn! Bạn hiểu rồi! Khi tôi hỏi tôi có nhớ định dạng chuỗi Ngày ngắn là gì không, tôi có thể tìm danh sách các định dạng chuỗi ở đâu, và tôi cũng thích rằng bạn đã trả lời bằng StringFormat = d. Rất rõ ràng và đầy đủ.
Tony

điều này luôn xuất ra định dạng Hoa Kỳ bất kể cài đặt văn hóa?
CRice

@CRice - có nó - vì một số lý do - bạn đã tự thiết lập văn hóa.
ChrisF

1
Cảm ơn, khá tệ khi giao diện người dùng "d" xuất ra khác với xaml.cs "d" của cùng một đối tượng ngày tháng.
CRice

ref lỗi văn hóa WPF, tôi chỉ thêm this.Language = System.Windows.Markup.XmlLanguage.GetLanguage (System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag); sau khi khởi tạo thành phần trong mọi cửa sổ;
peterG

53

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}'

2
Bạn cũng có thể sử dụng 'ConverterCulture =' trong ràng buộc của mình - yêu cầu giá trị để chỉ định dạng. (ConverterCulture = 'en-GB' là Vương quốc Anh).
khác

đây là câu trả lời hay nhất và dễ nhất cho vấn đề
Steven

Chúc mừng Steven! Tôi cũng đánh bại câu trả lời "chiến thắng" đối với tiện ích bổ sung ConverterCulture ... nhưng cứ như vậy.
khác

27

Sử dụng thuộc StringFormattính (hoặc ContentStringFormattrên ContentControlvà 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.Formatcho phép dấu ngoặc nhọn được thoát trong ngôn ngữ mở rộng đánh dấu.


4
Các {}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ờ.
Brown Monster,

12

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

5

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}'}"

4

Chỉ dùng:

<TextBlock Text="{Binding Date, StringFormat=\{0:d\}}" />

4

Nếu bạn muốn thêm một chuỗi với giá trị này, hãy sử dụng:

<TextBlock Text="{Binding Date, StringFormat= 'Date : {0:d}'}" />
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.