我在添加到 WPF Canvas 的元素上响应 MouseLeftButtonDown 事件。单击时一切正常(即事件处理程序正确触发),但它对鼠标指针的精度要求太高。你必须完美地站在圆圈的顶端才能让它发挥作用。我需要它更宽容一点;也许至少 1 或 2 个像素宽容。 Canvas 上的元素是漂亮的大圆圈(屏幕上大约四分之一的大小),所以圆圈本身并不太小,但是每个圆圈的 StrokeWidth 都是 1,所以它是一条细线。
您可以在此处查看屏幕截图:http://twitpic.com/1f2ci/full
大多数图形应用对鼠标的选择都不是那么挑剔,所以我想给用户一个熟悉的体验。
我怎样才能让它更宽容一点。
最佳答案
您可以连接到您的根布局对象的 MouseLeftButtonDown 事件,并通过执行以下操作检查哪些元素在点击范围内:
List<UIElement> hits = System.Windows.Media.VisualTreeHelper.FindElementsInHostCoordinates(Point, yourLayoutRootElement) as List<UIElement>;
http://msdn.microsoft.com/en-us/library/cc838402(VS.95).aspx
对于Point参数,可以使用MouseEventArgs参数e,调用它的GetPosition方法是这样的:
Point p = e.GetPosition(null)
我不记得是否使用 HitTest 而不是 FindElementsInHostCoordinates。两个都试试。
http://msdn.microsoft.com/en-us/library/ms608752.aspx
您可以从鼠标位置创建 4 个 Point 对象以创建假公差效果,并为所有 4 个点调用 FindElementsInHostCoordinates 或 HitTest。
关于c# - Canvas 上的 MouseLeftButtonDown 需要太高的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/580641/