【发布时间】:2019-09-04 21:16:58
【问题描述】:
我正在尝试将 RichTextBox 的插入符号放在它所在的当前行的末尾。.CaretPosition 属性与仅使用常规 TextBox 的简单 .CaretIndex 属性相比是一个很大的变化.
为了解决这个问题,我制作了自己的用户控件,它只是一个RichTextBox,它具有TextBox 的大部分属性/方法,例如.LineCount、.Text、@987654330 @ 等。我在我的用户控件中创建了一个 CaretIndex { get; set; } 属性,如下所示:
public int CaretIndex
{
get
{
TextPointer start = display.Document.ContentStart;
TextPointer curPosition = display.CaretPosition;
TextRange range = new TextRange(start, curPosition);
return range.Text.Length;
}
set
{
display.CaretPosition = display.Document.ContentStart;
for (int i = 0; i < value; i++)
{
TextPointer move = display.CaretPosition.GetNextInsertionPosition(LogicalDirection.Forward);
if (move != null)
display.CaretPosition = move;
}
}
}
get 方法似乎工作正常,但 set 并没有达到我的预期。我的目标是让插入符号在逻辑上向前移动一个“价值”的次数——价值是我想过去多少个字符——但结果只是抽象的插入符号放置行为。插入符号可以向下放置几行,就在原始行的正下方,或者一直放置到RichTextBox 的底部。
我想要的只是一种简单的方法来向左或向右移动插入符号,而不会出现未定义的行为。我是否以错误的方式接近我的CaretIndex 财产?我对RichTextBox 的CaretPosition 属性有错误的认识吗?有什么建议吗?
【问题讨论】:
-
你可能想试试
display.CaretPosition.GetPositionAtOffset(CaretIndex, LogicalDirection.Forward);stackoverflow.com/a/18653876/5308388 -
@Riddell 它需要在一个循环中还是只需要一个班轮?
-
@Riddell 这也不起作用,它只是返回 null
标签: c# wpf richtextbox