2010-02-21 9 views
5

Tính năng TextWrapping trong Silverlight được mô tả here. Tuy nhiên, tôi đang cố gắng tìm hiểu chi tiết về thuật toán ngắt dòng của họ.Các ký tự phân tách trong TextWrapping của Silverlight là gì?

Rõ ràng là một khoảng trắng sẽ làm cho văn bản bị vỡ (hoặc chia nhỏ), khuyến khích văn bản được quấn vào dòng tiếp theo. Và thông qua thử và sai tôi đã phát hiện ra rằng những nhân vật này cũng gây ra một sự chia rẽ:

  • \ t (tab)
  • -
  • !
  • ?

Nhưng tôi nghi ngờ đây là danh sách đầy đủ. Có ai tìm thấy danh sách đầy đủ các ký tự phân tách (bao gồm cả Unicode) không? Hay bạn có bất kỳ gợi ý thông minh nào để tìm ra điều này mà tôi chưa từng nghĩ đến? Thử và sai có thể chậm.

Trả lời

4

TextWrapping = Wrap sẽ cố gắng tuân thủ Tiêu chuẩn chuẩn Unicode số 14 mà Johannes đã liên kết. Tuy nhiên, nếu sử dụng cách tiếp cận này, văn bản vẫn không vừa với chiều rộng (do chiều rộng rất hạn chế hoặc từ dài) thì nó sẽ phá vỡ từ trên hai dòng, nó không hyphnate hoặc làm bất cứ điều gì thông minh. Ngay sau khi đặt một lá thư sẽ tràn ngập chiều rộng và nếu nó không thể tìm thấy một cái gì đó trong dòng đó sẽ cho phép nó sử dụng thuật toán tiêu chuẩn nó sẽ tiếp tục từ trên dòng tiếp theo.

1

Tôi đã viết một ứng dụng thử nghiệm nhỏ để giúp tôi xác định nhân vật nào trong số các nhân vật này bị chia rẽ. Nó vẫn là một quá trình thủ công nhưng ít nhất nó dễ dàng hơn để nhìn vào bây giờ. Các kịch bản bắt đầu vào mã ASCII 1 và tôi đã đi lên đến 3000.

Những gây sự chia rẽ sau nhân vật:

Private arrSplitAfter() As Char = {CChar(" "), CChar("-"), ChrW(9), CChar("!"), CChar("?"), CChar("%"), CChar(")"), CChar("/"), CChar("]"), CChar("|"), CChar("}"), ChrW(133), ChrW(162), ChrW(176), ChrW(1418), ChrW(1478), ChrW(1547), ChrW(1548), ChrW(1563), ChrW(1566), ChrW(1567), ChrW(1642), ChrW(1748), ChrW(2404), ChrW(2405)} 

Và những gây ra sự chia rẽ trước nhân vật:

Private arrSplitBefore() As Char = {CChar("$"), CChar("("), CChar("+"), CChar("["), CChar("\"), CChar("{"), ChrW(163), ChrW(164), ChrW(165), ChrW(177), ChrW(180), ChrW(712), ChrW(716), ChrW(2546), ChrW(2547), ChrW(2801)} 

Rõ ràng có nhiều ký tự cần thực hiện. Thật không may tôi đã chạy vào một trục trặc. Tôi đã cố gắng viết một số mã đánh dấu siêu hiệu quả sẽ hoạt động trên văn bản được bọc từ. Cho đến khi tôi có thể tìm ra giải pháp cho các vấn đề nổi bật của mình, tôi sẽ không bận tâm tiếp tục.