2014-10-27 132 views
1

我使用标记(如Visual Studio)编码滚动条,我希望能够在为richtextbox查找(Ctrl + F)时标记一个标记。我的用户控件是带有contentPresenter的scrollViewer,然后在我的窗口中将我的内容放入contentPresenter中。Wpf Richtextbox某个文本的位置

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

我的标记算法是基于我想标记的元素的位置。所以我想从richtextbox或他的父母的顶部(在我的情况下它是一个contentPresnter)。

在开始时,我因子评分关于得到我的字符串的行,但我不能导致它的一个RichTextBox和一个线可以有字体大小48和下12

SOLUTION

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

+0

你能更具体地说明你的意思吗? – furkle 2014-10-27 20:32:05

+0

我在滚动条上添加一个小矩形,让用户知道这个滚动偏移处有一些东西。 – Northik 2014-10-27 20:48:11

回答

0

我认为有两种基本的方式,你可以这样做:

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

  2. 使用第二个单独的控件,大约为滚动条的宽度和整个RichTextBox的高度。给这个控件一个透明的背景,并把它放在一个比RichTextBox更高的z顺序中,并且你可以绘制到RichTextBox的顶端。在我的想象中,这与你在#1中扩展RichTextBox的方式基本相同。但请记住两件事 - 您必须确保矩形和控制位置不是HitTestVisible,否则您将无法使用滚动条。

这也是可能的,这是一个内置函数,我完全不知道,但我从来没有遇到过它。

为了获得像素位置,您可以使用的一个函数是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中查找匹配的短语时,可以将插入符号设置在该位置,保存找到的所有位置并将其存储起来,以便以后用于绘制矩形。

+0

谢谢,它帮助我很多。 – Northik 2014-10-28 12:55:29