TextBox.GetRectFromCharacterIndex メソッドを見ましたか?
http://msdn.microsoft.com/en-us/library/ms603094.aspx
あなたの問題を正しく理解していれば、上記の例の文字「O」の四角形を取得できるはずです。
カスタムスペルチェッカーソリューションを表すために、特定のテキストボックスの装飾層に「赤い波線」を描く必要があるという同様の問題があります(WPFスペルチェッカーは制限が多すぎました)。
役立つ場合に備えて、その実装の部分的な例を次に示します。
//loop through the invalid words and draw the squiggilies
foreach (var word in rslt)
{
//find the index of the start of the invalid word
int idx1 = tbx.Text.ToLower().IndexOf(word.ToLower());
//find the index of the end of the invalid word
int idx2 = idx1 + (word.Length);
if (idx1 == -1)
continue;
//get a rect defining the location in coordinates of the invalid word.
var rec1 = tbx.GetRectFromCharacterIndex(idx1);
var rec2 = tbx.GetRectFromCharacterIndex(idx2);
//if the word is not visible or not fully visible, do not show the red line.
if (tbx.ActualWidth > 0)
{
if (rec1.X < 0 || rec2.X > tbx.ActualWidth)
continue;
}
if (rec1.Y < 0)
continue;
//actually draw the line under the word
SquigglyAdorner ado = new SquigglyAdorner(tbx, word, rec1.X, rec2.X, rec2.Bottom);
adornerLayer.Add(ado);
}
次に、その四角形を取り、それをスクリーン座標(または必要な座標)に変換します