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?谢谢。

4

2 回答 2

3

您正在寻找的是如何从TextChange 集合中提取TextChange对象。e.Changes以下应该有效:

int added = e.Changes.ElementAt(0).AddedLength;

但是,如果您想要看起来更具体的东西,您可以使用:

int added = e.Changes.FirstOrDefault().AddedLength;

因为e.Changes据我所知,目前将始终包含单个TextChange项目,我想即使在 WPF 文本框的未来实现中,它也将始终是第一个。

对于对我来说似乎真的没有必要的Non-Linq实现,您可以使用以下庞大的代码:

var x = e.Changes.GetEnumerator();
x.MoveNext();
int added = x.Current.AddedLength;
于 2012-07-30T18:58:16.397 回答
0

对于 TextBox,计数似乎始终为 1,因为 TextBox 不能包含字符以外的任何内容。

但我发现此搜索有关 TextChange 的答案,只是想向其他人提供 TextChange.Changes.Count 在与 RichTextBox 一起使用时可以大于 1 的知识。

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

如果您只是学习使用此功能,请注意,无论您是输入单个字符还是粘贴多行,Count 都可以为 1。

但是字体系列更改可以包括多个更改,实际上似乎每个选定的单词都有 1 个应用了更改的字体系列。但是,另一方面,对字体大小、下划线、粗体或斜体的更改可能会导致计数 = 0。

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

于 2017-11-19T20:51:52.623 回答