- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
一些背景知识。我希望能够处理 WPF RichTextBox 中插入符号所在行的文本。请参阅我之前关于 TextPointer 类的问题:How to keep track of TextPointer in WPF RichTextBox? .
我知道如何使用以 0 作为参数的 GetLineStartPosition 获取当前行开头的 TextPointer,但现在想获取行尾的 TextPointer。在我之前的问题中有人建议,这可以使用 GetLineStartPosition 方法。
如果有人能解释一下 GetLineStartPosition 如何处理行尾指针,我将不胜感激。
在此先感谢您的帮助。
最佳答案
GetLineStartPosition
能够返回行的开头而不是行的结尾。为此,您必须将它与 GetInsertionPosition
结合使用。
GetLineStartPosition
的工作原理如下:
GetLineStartPosition(-1)
获取上一行的开始GetLineStartPosition(0)
获取当前行的开始GetLineStartPosition(1)
获取下一行的开始你也可以用更大的整数来调用它来让行更远。
要获取一行的结尾,只需获取下一行的开头,然后获取之前的插入位置。基本上是这样的:
pointer.GetLineStartPosition(1).GetInsertionPosition(LogicalDirection.Backward);
但是,当您位于文档的最后一行时,这不起作用:GetLineStartPosition
返回 null。
修复它的简单方法是这样做:
var nextStart = pointer.GetLineStartPosition(1)
var lineEnd = (nextStart !=null ? nextStart : pointer.DocumentEnd).GetInsertionPosition(LogicalDirection.Backward);
必须使用 GetInsertionPosition
而不是使用 GetNextContextPosition
或 GetPointerAtOffset
移动一个符号的原因是 中的每个元素FlowDocument
元素树是一个符号。因此,例如,如果您的当前行是表格中的最后一行,GetLineStartPosition(1)
将在表格后面的第一个段落中的第一个 Run 中返回一个指针,而当前行的结尾是a 最后一个 TableCell 中最后一个段落中最后一个 Run 的结尾,......你明白了。
最好让 WPF 处理围绕 FlowDocument
移动 TextPointers
的所有复杂性,这意味着使用 GetInsertionPosition
来查找结束原始 TextPointer
指向的同一行。
关于c# - 使用 GetLineStartPosition 获取 WPF RichTextBox 中一行的结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3060108/
一些背景知识。我希望能够处理 WPF RichTextBox 中插入符号所在行的文本。请参阅我之前关于 TextPointer 类的问题:How to keep track of TextPointe
我是一名优秀的程序员,十分优秀!