2010-02-21 15 views
5

Die TextWrapping-Funktion in Silverlight wird here beschrieben. Ich versuche jedoch, die Einzelheiten ihres Zeilentrennungsalgorithmus herauszufinden.Was sind die Teilzeichen in Silverlight's TextWrapping?

Offensichtlich verursacht ein Leerzeichen, dass der Text unterbrochen (oder geteilt) wird, wodurch der Text in die nächste Zeile umbrochen wird. Und durch Versuch und Irrtum Ich habe festgestellt, dass diese Zeichen auch dazu führen, eine Spaltung:

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

Aber ich bezweifle, dass dies die vollständige Liste ist. Hat jemand die vollständige Liste der geteilten Zeichen (einschließlich Unicode) gefunden? Oder haben Sie clevere Vorschläge, um das herauszufinden, an die ich noch nicht gedacht habe? Versuch und Irrtum können langsam sein.

Antwort

4

TextWrapping = Wrap wird versuchen, dem Standard-Unicode-Standard Anhang # 14 zu entsprechen, den Johannes bereits verknüpft hat.

Wenn jedoch dieser Ansatz verwendet wird, passt der Text immer noch nicht zur Breite (aufgrund der sehr begrenzten Breite oder langen Wörter), dann wird das Wort über zwei Zeilen verteilt, es wird nicht hypheniert oder etwas Cleveres getan. Sobald ein Buchstabe die Breite überschreitet und wenn er in der Zeile nichts finden kann, das den Standardalgorithmus verwenden kann, wird das Wort in der nächsten Zeile fortgesetzt.

1

Ich habe eine kleine Test-App geschrieben, die mir hilft festzustellen, welche dieser Zeichen eine Teilung verursachen. Es ist immer noch ein manueller Prozess, aber es ist jetzt einfacher, es sich anzusehen. Das Skript begann im ASCII-Code 1 und ich habe bis 3000.

Diese verursachen nach oben gegangen, um eine Spaltung nach der Charakter:

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

Und diese verursachen eine Spaltung vor den Charakter:

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

Offensichtlich gibt es viel mehr Zeichen zu gehen. Leider bin ich in einen Schluckauf geraten. Ich habe versucht, einen super effizienten Hervorhebungscode zu schreiben, der mit Text umwickelt werden würde. Bis ich eine Lösung für meine Hervorhebungen finde, werde ich mich nicht weiter bemühen.