WPF-Text Wrap vs WrapWithOverflow

170

Was ist der "konzeptionelle" Unterschied zwischen TextWrapping="Wrap"und TextWrapping="WrapWithOverflow"(z. B. für eine TextBox)? Auf der MSDN-Seite über die Klasse TextBox gibt es nichts ... Danke.

Daniele Armanasco
quelle

Antworten:

187

MSDN

WrapWithOverflow Zeilenumbruch tritt auf, wenn die Zeile über die verfügbare Blockbreite hinaus überläuft. Eine Zeile kann jedoch über die Blockbreite hinaus überlaufen, wenn der Zeilenumbruchalgorithmus keine Zeilenumbruchmöglichkeit ermitteln kann, wie im Fall eines sehr langen Wortes, das in einem Container mit fester Breite ohne zulässiges Scrollen eingeschränkt ist.
NoWrap Es wird kein Zeilenumbruch durchgeführt.
Wrap Zeilenumbruch tritt auf, wenn die Leitung über die verfügbare Blockbreite überläuft, auch wenn der Standard - Zeilenumbruch - Algorithmus keine Zeilenumbruch Gelegenheit bestimmen kann, wie im Fall eines sehr langen Wortes gezwungen , sich in einem mit fester Breite Behälter mit nicht erlaubt Scrollen.

Hoffe das hilft

Arsen Mkrtchyan
quelle
11
Ich weiß, dass diese Frage an WPF gerichtet war, aber ich dachte, es könnte erwähnenswert sein, dass WrapWithOverflowsie in Silverlight nicht unterstützt wird. Nur Wrapund NoWrapwerden in Silverlight unterstützt. msdn.microsoft.com/en-us/library/…
blachniet
3
Ich habe das gelesen und bin mir des Unterschieds immer noch nicht sicher. Ist die Grundidee, WrapWithOverFlowdie keine Worte bricht, sondern Wrapwird?
Brian J
6
@BrianJ - Siehe meine Antwort für einige Beispiele.
Ken
317

Einige Beispiele:

Dies ist die ursprüngliche, unverpackte Version:

Keine Verpackung


Das ist NoWrap.

NoWrap


Das ist Wrap. Die Wörter Removeund Samplewurden am veund umbrochen le, obwohl es keine Möglichkeit für Zeilenumbrüche gibt.

Wickeln


Das ist WrapWithOverflow. Die veund lesind nicht sichtbar (sie überlaufen die verfügbare Blockbreite), da keine Möglichkeit für Zeilenumbrüche besteht. Das Allwurde in beiden Fällen umbrochen, da das spaceZeichen eine Möglichkeit für Zeilenumbrüche darstellt.

WrapWithOverflow


Bearbeiten:

Wie in den Kommentaren vorgeschlagen, finden Sie hier einige Beispiele für den Umgang mit WrapLeerzeichen. Wenn Widthist 100, Wrapund WrapWithOverflowsind identisch. Wrapbehandelt den Abstand zwischen widerund exampleals Zeilenumbruchmöglichkeit und wird daher examplein eine neue Zeile eingefügt, um das gesamte fortlaufende Wort zu erhalten.

Geben Sie hier die Bildbeschreibung ein

Ken
quelle
5
Diese Antwort würde davon profitieren, wenn in jedem Modus ein weiteres (breiteres) Schaltflächenbeispiel eingefügt würde, das eine gültige Leerzeichenunterbrechung aufweist. Auf einen Blick bedeutet dies, dass WrapLeerzeichen vollständig ignoriert werden, aber das stimmt nicht.
Scott Stafford
8

Eine Sache, die Sie zu den anderen Antworten hinzufügen können: Mit WrapWithOverflow können Sie Textausschnitte (Auslassungspunkte) für die langen Wörter verwenden, die abgeschnitten werden:

Geben Sie hier die Bildbeschreibung ein

<TextBlock TextWrapping="WrapWithOverflow" Width="120" TextTrimming="CharacterEllipsis">
    A really long word is antidisestablishmentarianism and we can use ellipsis trimming.
</TextBlock>
Mumm
quelle