假设我们从WPF TextBox
继承,然后尝试通过覆盖OnTextChanged
来更改文本。
然后我们会注意到发生了变化,但我们唯一的信息是:
我们可以使用
获得准确添加的文字Text.Substring(Change.Offset, Change.AddedLength)
在OnTextChanged
?
文本更改发生在不同的条件下(例如用户输入,粘贴文本或在代码中设置Text
属性)。 e.Changes
是否有可能出现相互冲突的变化?
这种方法是否是一种信任方式?如果答案为否,是否有其他标准方法可以获得准确的更改文本?
答案 0 :(得分:1)
对于TextBox,此事件在其文本更改时发生;对于RichTextBox,当任何内容或格式更改(例如,图像,表格或背景颜色)时,会发生此事件。
是的,如果是TextBox,您将始终获得准确的文本。您可以使用e.UndoAction检查文本的添加/删除。 请在此处阅读documentation。
不会发生相互冲突的变化。
一般来说,以下情况总是如此:
发生的更改会导致文档处于有效状态。 该集合是连续排序的,与控件中发生更改的位置有关。例如,TextChange对象 表示位置2的更改在TextChange之前 表示位置10处的变化的对象。
两个TextChange对象不代表重叠区域。 Offset的值加上一个TextChange的AddedLength值 对象总是小于或等于
的偏移值 集合中的下一个TextChange对象。同样,
的价值 偏移加上一个TextChange对象的RemovedLength值为
始终小于或等于下一个的偏移值 集合中的TextChange对象。该集合反映了所发生的任何变化,即使似乎没有净变化。在前面的例子中,既没有 第一次或第四次更改会导致净更改,因为每个更改只是为了 分别删除并重新添加和符号。但
实际上删除并添加了符号,因此它们包含在中 该系列。
可以阅读更多内容here。