如何按RTB的大小限制字符数?WPF文本框的同样问题。
我试图通过将RTB的客户端与Graphics.MeasureString
和TextRenderer.MeasureText
进行比较来限制它,但是它们的计算都有一些错误,而TR.MeasureText
不能将一个长的单词作为RTB包装。所以我有一个大问题。
在wpf中,我使用 FormattedText
获取文本大小,但也没有包含长词。
关于逻辑:在粘贴命令中,我试图制作文本字段的Adobe Acrobat逻辑:当您将长文本粘贴到其他文本中间时,您只粘贴了您可以的字符。
对不起我的语言。
wpf 只需使用文本框的" maxlength"属性。
粘贴文本将其限制为设定的字符量,但请记住,还计算了一个newline(CR LF -2个字符)。如果您将其粘贴到文本中间 - 粘贴的内容将仅限于最大长度之前的字符。
自OP提到这是关于宽度,而不是长度,这是考虑的途径 - 根据WPF的包装机制修剪文本,使用具有SET MaxWidth
的TextBox
。
private void this_TextChanged(object sender, TextChangedEventArgs e)
{
if (sender is TextBox)
{
var textb = sender as TextBox;
if (textb.LineCount > 1)
{
foreach (var change in e.Changes.Where(x=>x.RemovedLength == 0))
{
for (int index = change.AddedLength; index > 0; index--)
{
textb.Text = textb.Text.Remove(change.Offset, 1);
textb.UpdateLayout();
if (textb.LineCount == 1)
break;
}
if (textb.LineCount == 1)
break;
}
}
}
}
和此类文本框的.xAML
<TextBox TextChanged="this_TextChanged" MaxWidth="200" Text="{Binding TextValue}" TextWrapping="Wrap"/>
这只是一个粗略的例子 - 修剪粘贴的文本可以正常工作,但是如果您选择已经存在的文本的一部分并尝试通过粘贴文本替换它,则该问题不起作用 - 问题来自于更新文本变化中的文本,再次发射它 - 以这样的方式粘贴:
e.Changes.Where(x=>x.RemovedLength == 0)
使文本框前面的文本改为修剪 - 可能是固定的。