【问题标题】:Scroll to Position in RichTextBox滚动到 RichTextBox 中的位置
【发布时间】:2015-07-08 21:00:39
【问题描述】:
在滚动到富文本框中突出显示的文本/字符串位置时,我需要帮助。我能够找到文本并突出显示它,但我希望用户能够单击“下一步”按钮,并且该事件在每次单击后滚动到突出显示的单词第一次出现的垂直偏移位置到下一个,依此类推.任何专门用于查找突出显示文本行的垂直偏移位置的帮助也将有所帮助。提前致谢。
【问题讨论】:
标签:
c#
wpf
scroll
scrollbar
richtextbox
【解决方案1】:
我找到了类似问题here 的答案。下面是我相信会为您解决问题的代码。
TextPointer start = txtEditor.Selection.Start;
FrameworkContentElement fce = (start.Parent as FrameworkContentElement);
if (fce != null)
{
fce.BringIntoView();
}
【解决方案2】:
我有两个TextPointers,我用它创建了一个TextRange,然后使用.ApplyPropertyValue 设置背景颜色。然后我尝试了...
var fce = fromTextPointer as FrameworkContentElement;
if (fce != null)
fce.BringIntoView(); // unreliable
...但它不可靠。我最终发现有效的方法 - 表面上可靠 - 是使用 .Start 的 TextRange 我从同一个 fromTextPointer 创建的:
var fce = textRange.Start.Parent as FrameworkContentElement;
if (fce != null)
fce.BringIntoView(); // ostensibly reliable
我猜想某些动作——可能是TextRange的创建,但更可能是.ApplyPropertyValue的调用——在小部件和/或textRange对象中触发了足够的位置规范化,从而.BringIntoView()是可靠的。
也许这对于Selection 来说不是必需的——就像Wards 的答案一样——但我没有操纵Selection,这个问题也没有特别提到Selection,所以在这里发布以防万一它可以帮助其他一些可怜的灵魂避免数小时的 WPF“乐趣”。