GetLineStartPosition
能夠返回你一行的開始,但不是一行的結尾。爲此,您必須將其與GetInsertionPosition
結合使用。
這裏是GetLineStartPosition
是如何工作的:
GetLineStartPosition(-1)
獲取前行
GetLineStartPosition(0)
開始得到當前行
GetLineStartPosition(1)
開始得到下一行的開始
你也可以用更大的整數來調用它以使線條更遠。
爲了得到一條線的末尾就得到下一條線的開始,然後獲得先前的插入位置。基本上,它是這樣的:GetLineStartPosition
返回null:
pointer.GetLineStartPosition(1).GetInsertionPosition(LogicalDirection.Backward);
但是當你在文檔的最後一行,這並不工作。
最簡單的方法解決它是這樣做:
var nextStart = pointer.GetLineStartPosition(1)
var lineEnd = (nextStart !=null ? nextStart : pointer.DocumentEnd).GetInsertionPosition(LogicalDirection.Backward);
GetInsertionPosition
必須使用,而不是僅僅在使用GetNextContextPosition
或GetPointerAtOffset
移動一個符號的原因是,在FlowDocument
元素樹的每一個元素是一個符號。因此,例如,如果當前行是表中的最後一行,則GetLineStartPosition(1)
將在表格後面的第一個段落中的第一個Run中返回一個指針,而當前行的結尾是最後一個Run的結尾最後一個TableCell中的段落,......你明白了。
最好是讓WPF處理FlowDocument
,這意味着使用GetInsertionPosition
找到同一行原TextPointer
點結束走動TextPointers
的全部複雜性。
非常感謝Ray。再次,對我的問題非常有幫助。 – 2010-06-18 08:55:42