gpt4 book ai didi

wpf - GetPositionAtOffset 仅对文本等效?

转载 作者:行者123 更新时间:2023-12-04 15:45:42 25 4
gpt4 key购买 nike

有没有漂亮一个GetPositionAtOffset()的解决方案相当于只计算文本插入位置而不是所有符号?

C#中的动机示例:

TextRange GetRange(RichTextBox rtb, int startIndex, int length) {
TextPointer startPointer = rtb.Document.ContentStart.GetPositionAtOffset(startIndex);
TextPointer endPointer = startPointer.GetPositionAtOffset(length);
return new TextRange(startPointer, endPointer);
}

编辑:到目前为止,我是这样“解决”的

public static TextPointer GetInsertionPositionAtOffset(this TextPointer position, int offset, LogicalDirection direction)
{
if (!position.IsAtInsertionPosition) position = position.GetNextInsertionPosition(direction);
while (offset > 0 && position != null)
{
position = position.GetNextInsertionPosition(direction);
offset--;
if (Environment.NewLine.Length == 2 && position != null && position.IsAtLineStartPosition) offset --;
}
return position;
}

最佳答案

据我所知,没有。我的建议是您为此目的创建自己的 GetPositionAtOffset 方法。您可以使用以下方法检查 TextPointer 与哪个 PointerContext 相邻:

TextPointer.GetPointerContext(LogicalDirection);

要获取下一个指向不同 PointerContext 的 TextPointer:
TextPointer.GetNextContextPosition(LogicalDirection);

我在最近的一个项目中使用了一些示例代码,它通过循环直到找到一个来确保指针上下文是文本类型。您可以在您的实现中使用它,并在找到时跳过偏移增量:
// for a TextPointer start

while (start.GetPointerContext(LogicalDirection.Forward)
!= TextPointerContext.Text)
{
start = start.GetNextContextPosition(LogicalDirection.Forward);
if (start == null) return;
}

希望您可以利用这些信息。

关于wpf - GetPositionAtOffset 仅对文本等效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15839031/

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