C# 如何找到WPF文本框';什么是更改的文本?

C# 如何找到WPF文本框';什么是更改的文本?,c#,wpf,textbox,custom-controls,textchanged,C#,Wpf,Textbox,Custom Controls,Textchanged,假设我们从WPFTextBox继承,然后尝试通过重写OnTextChanged来获得文本更改 然后我们会注意到什么时候发生了变化,但我们唯一能得到的信息是: 发生此更改的偏移量 删除长度 附加长度 我们可以使用 Text.Substring(Change.Offset, Change.AddedLength) 在OnTextChanged 文本更改发生在不同的条件下(例如用户输入、粘贴文本或设置代码中的Text属性)。e.changes中是否存在冲突变更的可能性 这是一种信任方式吗?如果

假设我们从WPF
TextBox
继承,然后尝试通过重写
OnTextChanged
来获得文本更改

然后我们会注意到什么时候发生了变化,但我们唯一能得到的信息是:

  • 发生此更改的偏移量
  • 删除长度
  • 附加长度
我们可以使用

Text.Substring(Change.Offset, Change.AddedLength) 
OnTextChanged

文本更改发生在不同的条件下(例如用户输入、粘贴文本或设置代码中的
Text
属性)。
e.changes
中是否存在冲突变更的可能性


这是一种信任方式吗?如果答案是“否”,是否有其他标准方法可以获得准确的更改文本?

我用一个文本框和一个标签制作了一个简短的测试程序,但我找不到您描述的问题。如果我像下面这样为TextBox实现TextChanged事件,即使我粘贴了一些东西,它也会工作。需要检查null,因为如果TextBox具有初始值,initilize方法将在创建标签之前触发更改事件

 private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        TextBox tbSource = (sender as TextBox);

        if (lblOutput == null)
            return; 

        lblOutput.Content = tbSource.Text; 

    }

对于文本框,当其文本更改时发生此事件;对于RichTextBox,当任何内容或格式发生更改(例如,图像、表格或背景色)时,会发生此事件

  • 我们可以通过使用…来获得准确的添加文本吗 是的,在文本框的情况下,您将始终获得准确的文本。您可以使用e.UndoAction检查文本的添加/删除。 读这里

  • e.变更中是否存在冲突变更的可能性 不会有相互冲突的变化

    一般而言,以下情况始终正确:

    • 发生的更改会导致文档处于有效状态。 集合是连续排序的,与控件中发生更改的位置有关。例如,TextChange对象 表示位置2的更改在文本更改之前 对象,表示位置10处的更改

    • 两个TextChange对象不表示重叠区域。偏移值加上一个文本更改的AddedLength值
      对象始终小于或等于偏移的值
      集合中的下一个TextChange对象。同样地,
      偏移量加上一个TextChange对象的RemovedLength值为
      始终小于或等于下一个的偏移值
      集合中的TextChange对象

    • 集合反映了发生的任何变化,即使看起来没有净变化。在前面的示例中,
      第一个或第四个变化导致净变化,因为每个变化都只是
      分别删除和重新添加和符号。但是
      这些符号实际上已被删除和添加,因此它们包含在
      收藏

    更多信息可以阅读。

    请参见此