作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如何在 WPF 中的 RichTextBox 中设置插入符/光标位置?
我使用 MSDN CaretPosition 中的代码但是好像不能设置光标?
// Create a new FlowDocument, and add 3 paragraphs.
FlowDocument flowDoc = new FlowDocument();
flowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 1")));
flowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 2")));
flowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 3")));
// Set the FlowDocument to be the content for a new RichTextBox.
RichTextBox rtb = new RichTextBox(flowDoc);
// Get the current caret position.
TextPointer caretPos = rtb.CaretPosition;
// Set the TextPointer to the end of the current document.
caretPos = caretPos.DocumentEnd;
// Specify the new caret position at the end of the current document.
rtb.CaretPosition = caretPos;
最佳答案
How to set caret/cursor position in RichTextBox in WPF?
假设rtb
是您的RichTextBox 的名称,与Blocks and Inlines 不同, 您可以通过以下方式在文档的开头设置插入符:
rtb.CaretPosition = rtb.CaretPosition.DocumentStart;
或在结尾处:
rtb.CaretPosition = rtb.CaretPosition.DocumentEnd;
另一方面,假设您有一个特定的段落或 block ,例如:
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
中实现的不同方法,您可以使用它来访问文档/ block /内联的不同部分:
rtb.CaretPosition = rtb.CaretPosition.GetLineStartPosition(0);
rtb.CaretPosition = rtb.CaretPosition.GetPositionAtOffset(2);
有关更多方法和更多信息,请参阅链接。
最后,您可能想使用在 block 或内联中实现的 BringIntoView
方法:
blk.BringIntoView();
r.BringIntoView();
同时设置键盘焦点,以查看插入符号的闪烁:
Keyboard.Focus(rtb);
关于c# - 在 RichTextBox 中设置插入符/光标位置 - WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42429765/
我是一名优秀的程序员,十分优秀!