C# WPF:如何从TextBox获取当前绝对行数和列数(忽略文本换行)

C# WPF:如何从TextBox获取当前绝对行数和列数(忽略文本换行),c#,.net,wpf,wpf-controls,C#,.net,Wpf,Wpf Controls,我试图获得文本框中插入符号的行和列/字符的绝对位置(就像它在Windows记事本中实现的那样)。 我知道TextBox.GetLineIndexFromCharacterIndex()或TextBox.GetCharacterIndexFromLineIndex(),但这些方法返回相对位置(我的意思是,这些方法计算换行数),例如,如果第一行换行到第二行,这个方法将返回第二行的索引,所以我需要另一个解决方案。 此外,我还尝试自己计算位置(通过字符串使用循环),但对于大量文本,计算速度非常慢 我认

我试图获得文本框中插入符号的行和列/字符的绝对位置(就像它在Windows记事本中实现的那样)。 我知道
TextBox.GetLineIndexFromCharacterIndex()
TextBox.GetCharacterIndexFromLineIndex()
,但这些方法返回相对位置(我的意思是,这些方法计算换行数),例如,如果第一行换行到第二行,这个方法将返回第二行的索引,所以我需要另一个解决方案。 此外,我还尝试自己计算位置(通过字符串使用循环),但对于大量文本,计算速度非常慢


我认为没有任何方法可以在不以某种方式循环文本的情况下获得给定偏移量(字符)的行号。但是,有些方法会比其他方法更有效

您可以从
文本框
控件本身获得一些灵感,因为源代码在这里免费提供:

TextBox
无论如何都需要枚举每个字符才能显示文本。作为这一过程的一部分,它还需要决定何时开始新的生产线。为了加快未来的计算速度,它保留了一个“行度量”的内部列表——基本上是一个列表,其中列出了每行的起始位置以及每行的长度。它使用此内部列表更高效地执行计算,如
GetCharacterIndexFromLineIndex
GetLineIndexFromCharacterIndex
,而无需再次检查每个字符


你应该能做类似的事情。在第一次加载时,通过在背景中循环文本,在开始时创建自己的行位置列表,然后在进行更改时使该列表保持最新。

出于好奇,用例是什么?为什么你需要知道一个没有换行的字符在一个换行的文本框中的位置?@KeithStein我正在创建一个类似windows记事本的应用程序(在WPF上),它支持插件和样式化,我需要创建一个状态栏,其中包含关于textbox的所有主要信息。@KeithStein你可以在这里观看简单的演示: