【发布时间】:2023-03-27 22:45:01
【问题描述】:
我在可视层中为Hit Testing 使用下面的代码。当我单击Drawing 视觉中绘制的线条时,我想获得点击。但由于线条很窄,我没有得到好的结果。
我想到的一个解决方案是在单击时增加鼠标覆盖的区域。这样,即使我在离线稍远的地方单击,我也会确保鼠标击中线。
我怎样才能做到这一点?或者您还有什么建议可以改善这种情况?
var x = MousePos.RightDown.X;
var y = MousePos.RightDown.Y;
var drawing = MyCanvas.GetRebarsVisual();
var pt = new Point(x,y);
var result = VisualTreeHelper.HitTest(drawing, pt);
if (result != null)
{
MessageBox.Show("You clicked on the line!");
}
【问题讨论】:
-
使用
VisualTreeHelper.HitTest可以指定HitTestParameters,使用以pt为中心但大于GeometryHitTestParameters传递的一个点:VisualTreeHelper.HitTest(drawing, null, null, new GeometryHitTestParameters(...))。 -
@AdrianoRepetti 谢谢,我只是在探索这个选项。你能帮我写一篇文章或例子吗?
-
在评论中添加,将
...替换为new RectangleGeometry(new Rect(x - 2, y - 2, 4, 4))。嗯……举个例子。矩形是最简单的一种,但特别是如果您打算将应用程序与触摸屏一起使用,圆形将更好地代表更大的命中测试区域。 -
@AdrianoRepetti 非常感谢阿德里亚诺,我到了那里,但我的问题是我应该在哪里分配 VisualTreeHelper...,正如您在我的示例中看到的那样,我将其分配给结果.我对此完全陌生。