У меня есть Canvas с несколькими элементами, такими как Line, Path и Text Box. В событии 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 в этом прямоугольнике и возвращает true только в прямоугольнике L=0 T=0 R=50 B=20. Другими словами, тест на попадание знает размер текстового поля, но игнорирует его расположение не на 0,0.
Почему это происходит и как обойти это? (У меня такое ощущение, что это как-то связано с тем, что для позиционирования элементов Line и Path я не использую SetLeft/SetTop)