【发布时间】:2012-11-29 08:23:41
【问题描述】:
我找不到那个功能。基本上我有一个多行文本框,当我执行搜索时,我会突出显示结果。但是,如果结果不在视图中,我将不得不手动向下滚动,直到找到突出显示的结果,这超出了“查找”功能的目的。
我不想使用 RichTextBox,因为我遇到了一些性能问题。
【问题讨论】:
我找不到那个功能。基本上我有一个多行文本框,当我执行搜索时,我会突出显示结果。但是,如果结果不在视图中,我将不得不手动向下滚动,直到找到突出显示的结果,这超出了“查找”功能的目的。
我不想使用 RichTextBox,因为我遇到了一些性能问题。
【问题讨论】:
您可以将GetLineIndexFromCharacterIndex 与ScrollToLine 结合使用:
var selectionStart = x;
var selectionLength = y;
textBox.Select(selectionStart, selectionLength);
textBox.ScrollToLine(textBox.GetLineIndexFromCharacterIndex(textBox.SelectionStart));
【讨论】:
textBox.ScrollToLine(textBox.GetLineIndexFromCharacterIndex(textBox.SelectionStart)),而不是selectionStart。当您调用Select 时,WPF 映射超出文本长度的范围,如果您将过大的内容传递给GetLineIndexFromCharacterIndex,则会引发异常。
textBox.Focus();
ScrollToLine 对我来说不够准确。我的文本框启用了换行,因此行索引不可靠。相反,我使用了这个:
textBox.CaretIndex = selectionStart;
textBox.ScrollToEnd();
textBox.Select(selectionStart, selectionLength);
基本上,ScrollToEnd 执行滚动到插入符号。
【讨论】:
Scrolls the view of the editing control to the end of the content. msdn.microsoft.com/en-us/library/… 甚至微软也这么说!