使用文本格式化程序API 时遇到了一些问题并需要帮助。
我有一个文本运行的LinkedList(我创建了Run
类,它有一个Text
属性,用于存储文本字符串和一堆属性,用于定义文本格式选项) 。我还实现了我的CustomTextSource
课程(源自TextSource
)。 GetTextRun
方法实现:
public override TextRun GetTextRun(int textSourceCharacterIndex)
{
Run run = Document.Runs.ToList().Find(x => x.Contains(textSourceCharacterIndex));
if (run == null)
{
return new TextEndOfParagraph(1);
}
if (run.Length == 1 && run.Text.ToString()[0] == '\n')
{
return new TextEndOfLine(1);
}
return new TextCharacters(run.Text.ToString(),
run.Start, run.Length,
new GenericTextRunProperties(run.Formatting));
}
其中Contains
是Run class的方法:
public bool Contains(int index)
{
return (Start <= index) && ((Start + Length) > index);
}
Start
和Length
属性只是整数,用于存储文本运行的开始和长度。
问题在于,在某些情况下,GetTextRun
方法会在最后一个return语句中抛出ArgumentOutOfRangeException
,并显示以下消息:&#34; 参数的值可以&#39; t大于[数字]。参数名称:offsetToFirstChar &#34;。
例如,当文本存储具有表示新行的字符(新行字符存储在单独的运行中),并且一旦Text Formatter使用此字符运行,然后尝试进行下一次运行(让我们调用此运行&#34; RunAfterNewLine &#34;)异常消息中的[number]等于( RunAfterNewLine .Length - 1)。
所以任何人都可以解释为什么它会发生以及如何解决它? 任何帮助将不胜感激!
答案 0 :(得分:1)
从文档中,offsetToFirstChar
(您传递run.Start
的地方)是
在characterString中使用的第一个字符的偏移量。
和characterString
是您传递run.Text.ToString()
的第一个参数。
假设run.Text.ToString()
只返回该运行中的文本而不是文档的整个文本,那么你不应该只传递0吗?