如何在 WPF 中的 RichTextBox 中设置插入符/光标位置?
假如说rtb
是你的RichTextBox的名字,有不同的块和内联 https://msdn.microsoft.com/en-us/library/system.windows.controls.richtextbox.blocks(v=vs.95).aspx,您可以通过以下方式在文档的开头设置插入符:
rtb.CaretPosition = rtb.CaretPosition.DocumentStart;
或在其末尾:
rtb.CaretPosition = rtb.CaretPosition.DocumentEnd;
另一方面,假设您有特定的段落或块,例如:
Block blk = rtb.Document.Blocks.ElementAt(1);
您可以将插入符号设置为其开头
rtb.CaretPosition = blk.ContentStart;
或它的结束
rtb.CaretPosition = blk.ContentEnd;
或者如果您有特定的内联,例如
Run r = ((Paragraph)rtb.Document.Blocks.ElementAt(0)).Inlines.ElementAt(1) as Run;
您还可以使用
rtb.CaretPosition = r.ContentStart;
rtb.CaretPosition = r.ContentEnd;
当然,如果您正在处理具有从右到左和从左到右文本的复杂段落,您可能需要考虑
rtb.CaretPosition = blk.ElementStart;
rtb.CaretPosition = blk.ElementEnd;
另请注意在TextPointer https://msdn.microsoft.com/en-us/library/system.windows.documents.textpointer(v=vs.110).aspx,您可以使用它来访问文档/块/内联的不同部分:
rtb.CaretPosition = rtb.CaretPosition.GetLineStartPosition(0);
rtb.CaretPosition = rtb.CaretPosition.GetPositionAtOffset(2);
请参阅链接以获取更多方法和更多信息。
最后,您可能想使用BringIntoView
在块或内联中实现的方法:
blk.BringIntoView();
r.BringIntoView();
并设置键盘焦点,以查看插入符号的闪烁:
Keyboard.Focus(rtb);