GetRectFromCharacterIndex返回无穷大值而不是实际的rect值

时间:2013-04-17 14:44:02

标签: c# .net wpf layout adorner

我试图让一个矩形表示WPF中textBox中某些文本的位置。

我遇到的问题是,为UT返回的值将返回为" Infinity"。

rect.X真的是我所关心的。

例如,如果我在textChanged事件上调用此方法,则可以正常工作。

在TextBox.Loaded事件中调用此方法将返回上述内容。我正在寻找任何可能缺少的东西。

我的理解是布局尚未计算,但即使附加到TextBox的LayoutUpdated()事件也无法正常工作。

一些代码,如果它会显示任何内容:

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);
      }
    };

0 个答案:

没有答案