我有一个画布,上面有几个元素,比如线条、路径和文本框。在MouseOver
Canvas 的HitTest
情况下,它们都有一个,例如:
bool HitTest( Point p )
{
return VisualTreeHelper.HitTest( textBox, p ) != null;
}
这适用于线条和路径的像素精确,但不适用于文本框。
例如,当 TextBox 位于 50、50 时,如下所示:
Canvas.SetLeft( textBox, 50.0 );
Canvas.SetTop( textBox, 50.0 );
它在该位置正确绘制:如果文本大约 20 像素高和 50 像素宽,则屏幕上的边界矩形大致为 L=50 T=50 R=100 B=70。
但是,该HitTest
函数在该矩形中返回 false,并且仅在矩形 L=0 T=0 R=50 B=20 中返回 true。换句话说,命中测试知道文本框的大小,但忽略它不在 0,0 处。
为什么会发生这种情况,以及如何解决?(我感觉这与我不使用 SetLeft/SetTop 定位 Line 和 Path 元素有关)