2014-10-27 49 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