gpt4 book ai didi

c# - 在 RichTextBox 中设置插入符/光标位置 - WPF

转载 作者:太空狗 更新时间:2023-10-29 20:56:12 25 4
gpt4 key购买 nike

如何在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com