C# Wpf Richtextbox特定文本的位置

C# Wpf Richtextbox特定文本的位置,c#,wpf,richtextbox,C#,Wpf,Richtextbox,我正在用mark(比如visualstudio)编写一个滚动条,我希望在查找richtextbox(Ctrl+F)时能够添加一个标记。我的用户控件是一个带有contentPresenter的scrollViewer,然后在我的窗口中将我的内容放入contentPresenter 现在,我能够找到我想要的所有图案。但是现在,我想在滚动条上添加一个标记 我的标记算法基于我要标记的元素的位置。所以我想从richtextbox的顶部或者他的父母那里得到这个位置(在我的例子中是ContentPresent

我正在用mark(比如visualstudio)编写一个滚动条,我希望在查找richtextbox(Ctrl+F)时能够添加一个标记。我的用户控件是一个带有contentPresenter的scrollViewer,然后在我的窗口中将我的内容放入contentPresenter

现在,我能够找到我想要的所有图案。但是现在,我想在滚动条上添加一个标记

我的标记算法基于我要标记的元素的位置。所以我想从richtextbox的顶部或者他的父母那里得到这个位置(在我的例子中是ContentPresenter)

一开始,我想得到字符串的行,但我不能因为它是一个richtextbox,一行的字体大小可以是48,下一行的字体大小可以是12

解决方案


我最后想到了一个关于弗克尔的主意。我使用RichTextBox.CaretPosition.GetCharacterRect(…)来获取Rect的Y和Height属性。

我认为有两种基本方法可以做到这一点:

  • 创建扩展RichTextBox功能的自定义控件。这里有关于在MSDN上扩展WPF控件的文档:

  • 使用第二个单独的控件,大约是滚动条的宽度和整个RichTextBox的高度。为这个控件提供一个透明的背景,并将其放置在比RichTextBox更高的z顺序上,这样您就可以在RichTextBox上方绘制。在我的想象中,这基本上与您在#1中扩展RichTextBox的方式相同。不过,请记住两件事——您必须确保矩形及其所在的控件不可见,否则您将无法使用滚动条

  • 也有可能这是一个我完全不知道的内置函数,但我以前从未遇到过


    为了获得像素位置,可以使用一个函数CaretPosition.GetCharacterRect():。在移动RichTextBox以查找匹配的短语时,您可以将插入符号设置在该位置,保存找到的所有位置并存储这些位置,以便以后在绘制矩形时使用。

    您能否更具体地说明“放置标记”的含义?我在滚动条上添加了一个小矩形,以便用户知道在这个滚动偏移处有一些东西。谢谢,这对我帮助很大。