我的WPF TextBox有一个TextChanged
事件,如下所示:
private void textMatch_TextChanged(object sender, TextChangedEventArgs e)
{
var m = e.Changes;//here I can see e.Changes has what I'm looking for
//do some other stuff here.
}
但是,我想要做的是检查添加的文本的长度。显然,e.Changes
包含该值,但我无法找到以编程方式找到的方法我也无法在线找到任何示例。
我目前的检查方法是每次更改文本时存储当前长度,并确保新长度仅增加1,但这有点像黑客攻击。
以前有人试过这个吗?如何使用TextChangedEventArgs
找出添加文本的长度?感谢。
答案 0 :(得分:3)
您正在寻找的是如何从TextChange
TextChange集合中提取e.Changes
对象。以下应该有效:
int added = e.Changes.ElementAt(0).AddedLength;
但是,如果您想要看起来更具体的内容,您可以使用:
int added = e.Changes.FirstOrDefault().AddedLength;
由于e.Changes
据我所知目前将始终包含一个TextChange
项目,我想它总是第一个甚至在未来的实现中WPF TextBox。
对于非Linq 实施对我来说似乎没必要,您可以使用以下庞大的代码:
var x = e.Changes.GetEnumerator();
x.MoveNext();
int added = x.Current.AddedLength;
答案 1 :(得分:0)
对于TextBox,似乎计数总是为1,因为TextBox不能包含除字符以外的任何内容。
但是我发现这个搜索有关TextChange的答案,并且只是想让其他人知道TextChange.Changes.Count在与RichTextBox一起使用时可以大于1。
这个结果可能有点令人困惑。
如果您只是学习使用此功能,请注意无论您是输入单个字符还是粘贴多行,计数都可以为1.
但是字体系列更改可以包含多个更改,实际上每个选定的单词看起来应用了已更改的字体系列。 但是,另一方面,对字体大小,下划线,粗体或斜体的更改可能导致Count = 0.
使用RichTextBox时,TextChange是由符号更改产生的,而不是字符更改。因此,您可以粘贴“Hello To All The World”并获得单个TextChange,因为它是包含粘贴文本的单个TextElement。