【发布时间】:2012-12-13 23:38:19
【问题描述】:
我有一个画布,上面有几个元素,比如线条、路径和文本框。在 Canvas 的 MouseOver 事件中,所有这些事件都有一个 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 元素有关)
【问题讨论】:
标签: wpf canvas textbox hittest