我正在尝试获取一个表示 WPF 中文本框内某些文本位置的矩形。
我遇到的问题是矩形返回的值返回为“无穷大”。
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);
}
};