BrianKE
BrianKE

Reputation: 4185

WPF TextBox disable break on special characters

I have a TextBox defined like this:

<TextBox Text="{Binding License.LicenseKey}"
         HorizontalContentAlignment="Left" 
         TextAlignment="Justify"
         Width="350"
         Height="100"
         Margin="10,0,0,0"
         TextWrapping="Wrap" />

Currently a long string will break on special characters:

enter image description here

I would prefer it to simply break on any character once it reaches the end of the TextBox like this:

enter image description here

Is there a way to disable the stock breaking that a TextBox uses? I have tried various options for TextAlignment and HorizontalContentAlignment to no avail.

Upvotes: 4

Views: 1075

Answers (2)

ckuri
ckuri

Reputation: 4535

You could add a zero-width space (U+200B) after each character which would allow a break at any position. You would need to define a property in your view model and bind to it, and have the getter do this transformation so that it is displayed with line breaks, e.g.:

string SomeProperty
{
  get { return String.Join(string.Empty, License.LicenseKey.Zip(new string('\u200B', License.LicenseKey.Length), (x, y) => x.ToString() + y)); }
  set { Model.LicenseKey = value?.Replace("\u200B", string.Empty); }
}

However I don't know what would happen to the cursor position.

Upvotes: 2

dornadigital
dornadigital

Reputation: 178

This is exceptionally messy due to limited options on the TextBox's TextWrapping property.

See this forum post to explain the U+200B comment below your question. However, that doesn't work for you because you DON'T want it to break. And if there's a library of standard non-breaking versions of characters, I've been unable to dig it up.

The only way I see this working is to use a fixed-width font, keeping track of how many characters are entered alongside the capacity of the box, and adding your own newline when that capacity is reached.

Upvotes: 0

Related Questions