WPF TextBox禁用特殊字符的中断

时间:2017-06-13 17:37:21

标签: c# wpf textbox

我的TextBox定义如下:

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

目前长字符串会在特殊字符上中断:

enter image description here

我希望它一旦到达TextBox的末尾就可以简单地打破任何角色:

enter image description here

有没有办法禁用TextBox使用的破产?我尝试了TextAlignmentHorizontalContentAlignment的各种选项无效。

2 个答案:

答案 0 :(得分:0)

由于TextBox的TextWrapping属性选项有限,这非常混乱。

请参阅此论坛帖子:https://social.msdn.microsoft.com/Forums/vstudio/en-US/3cb5b7a8-5628-4dc3-bd43-be67d1a449b1/how-to-customizing-textblock-line-breaking-algorithm-in-textwrapping?forum=wpf以解释您问题下面的U + 200B评论。但是,这对您不起作用,因为您不希望它破坏。如果有一个标准的非破坏版本的字符库,我一直无法挖掘它。

我看到这个工作的唯一方法是使用固定宽度的字体,跟踪在框的容量旁边输入的字符数,并在达到容量时添加自己的换行符。

答案 1 :(得分:0)

您可以在每个字符后面添加一个零宽度空格(U + 200B),这样可以在任何位置中断。所以需要在视图模型中定义一个属性,你应该和它的getter进行这种转换,例如:

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

,以便显示换行符。但是我不知道光标位置会发生什么。