我是否可以仅针对右键事件将IsHitTestVisible设置为false?

时间:2010-01-18 17:44:19

标签: wpf events mouse z-order hittest

显然,这个问题的直截了当的答案是“不”,但对我来说,达到这种效果的最佳途径是什么?要解释一下,这里有一些背景......

我有一个应用程序,在该图像上显示一个图像加上几层重叠的形状。所有这些都放置在网格单元格中,彼此重叠,图像位于本地z顺序的底部。对于速度,叠加层实现为从FrameworkElement派生的类,它们创建和管理自己的视觉效果。

这是一个基本图表(虽然分解为3D),说明了图层的排列方式以及它们有/需要的相互作用:


overlapped_controls.png http://www.afterbang.co.uk/mal/stackoverflow/overlapped_controls.png


如您所见,上部叠加层必须允许用户在图像中的任何位置拖出新的矩形。为此,我给它一个透明的背景,就像一块玻璃板,你可以画出来。这样做的明显缺点是它会阻止所有鼠标事件传递到较低层。

我真的只想在顶层的透明区域中捕获鼠标按钮的事件,并让其他事件在z顺序下进一步击中层。

我是否应该关注这种类型的WPF模式?任何一种最佳实践或技术?

我对WPF还很新鲜,但想要编写一个与API一致的解决方案。感谢。

1 个答案:

答案 0 :(得分:1)

我会在需要右键单击的元素上使用PreviewMouseDown事件,并对需要左键单击的元素使用LeftMouseDownPreviewMouseDown事件仍将触发,但您可以编写处理程序以忽略其左键单击。

这实际上是我用来在图像上显示形状的模式,因此用户可以圈出图像的一部分以突出显示它。我在图像上有PreviewMouseDown,并且它一直正常运行,然后我在任何形状上都有一个LeftMouseDown处理程序,以便可以移动,删除等等。