如何在WPF TextBox的TextChange事件中检查添加文本的长度?

4

我有一个 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 找出添加文本的长度? 谢谢。
2个回答

3
您需要的是如何从e.Changes的TextChange集合中提取TextChange对象。下面的代码应该可行:
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;

运行得很好,尽管我不得不添加 using System.Linq;,但是有没有一种恒定的方法来做到这一点?即使有多个更改,0 始终会检索信息吗?如果没有LINQ呢? - rtuner

0

对于一个文本框,它似乎计数始终为1,因为文本框不能包含除字符以外的任何内容。

但我在寻找有关TextChange的答案时发现了这一点,并希望向其他人提供知识,即在与RichTextBox一起使用时,TextChange.Changes.Count可能大于1。

这个结果可能有点令人困惑。

如果你刚开始学习这个,要注意无论你输入一个单独的字符还是粘贴多行,计数都可能为1。

但是,字体族更改可以包括多个更改,实际上似乎每个更改的字体族应用于所选单词中的1个。 然而,另一方面,字体大小、下划线、粗体或斜体的更改可能导致Count = 0。

在RichTextBox中,TextChange是由符号更改而不是字符更改引起的。因此,您可以粘贴“Hello To All The World”,并获得单个TextChange,因为它是包含粘贴文本的单个TextElement。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接