Wpf Richtextbox某个文本的位置

时间:2014-10-27 20:29:13

标签: c# wpf richtextbox

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

现在,我能够找到this code所需的所有模式。但是现在,我想在滚动条上添加一个标记。

我放置标记的算法基于我想要标记的元素的位置。所以我想从richtextbox或他父母的顶部获取位置(在我的例子中,它是一个contentPresnter)。

一开始,我想要获取我的字符串行,但我不能使它成为一个richtextbox,一行可以有48字体和下一行。

我最终得到了Furkle的一个想法。我使用RichTextBox.CaretPosition.GetCharacterRect(...)来获取Rect的Y和Height属性。

1 个答案:

答案 0 :(得分:1)

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

  1. 创建一个扩展RichTextBox功能的自定义控件。有关于在MSDN上扩展WPF控件的文档:http://msdn.microsoft.com/en-us/library/cc295235.aspx

  2. 使用第二个单独的控件,大约是滚动条的宽度和整个RichTextBox的高度。为此控件提供透明背景并将其置于比RichTextBox更高的z顺序中,并且您将能够在RichTextBox上方绘制。在我的想象中,这与你在#1中扩展RichTextBox的方式基本相同。但要记住两件事 - 你必须确保矩形和它们被控制的控制不是HitTestVisible,否则你将无法使用滚动条

  3. 这也可能是我完全没有意识到的内置功能,但我以前从未遇到过。

    为了获得像素位置,您可以使用的一个函数是CaretPosition.GetCharacterRect():https://social.msdn.microsoft.com/Forums/vstudio/en-US/af780cd9-a4d5-4ab0-850d-c1e98a0d0046/how-to-get-x-y-corordicates-of-caret-in-richtextbox-when-caret-is-at-the-end-of-the-wrapped-line?forum=wpf。在浏览RichTextBox以查找匹配的短语时,您可以将插入符号设置在该位置,保存您找到的所有位置并将其存储以便稍后用于绘制矩形。