显然,问题的直接答案是“否”,但是对我而言,实现这种效果的最佳方法是什么?解释一下,这里有一些背景知识...
我有一个可显示图像以及该图像上几层重叠形状的应用程序。所有这些都放置在一个网格单元中,彼此重叠,并且图像位于局部z阶的底部。为了提高速度,将叠加层实现为派生自FrameworkElement的类,并且它们创建和管理自己的视觉效果。
这是一个基本图(尽管分解为3D),说明了各层的排列方式以及它们之间/需要的相互作用:
overlapped_controls.png http://www.afterbang.co.uk/mal/stackoverflow/overlapped_controls.png
如您所见,上方的叠加层必须允许用户将新的矩形拖出图像中的任意位置。为此,我给它提供了透明的背景,就像可以在其上绘制的玻璃板一样。这样做的明显缺点是,它将阻止所有鼠标事件向下传递到较低的层。
我真的很想只将鼠标左键的事件捕获在该顶层的透明区域中,然后让其他事件击中z轴下方的层。
对于这种事情,我应该遵循WPF思维模式吗?有什么最佳实践或技巧?
我对WPF还是很陌生,但是想编写一个与API一致的解决方案。谢谢。
最佳答案
我将在需要右键单击的元素上使用PreviewMouseDown
事件,并在需要左键单击的元素上使用LeftMouseDown
。 PreviewMouseDown
事件仍然会触发,但是您可以编写处理程序以忽略它的左键单击。
实际上,这是我用来在图像顶部显示形状的一种模式,以便用户可以圈出图像的一部分以突出显示它。我在图像上有PreviewMouseDown
,并且它始终正常运行,然后在任何形状上都有LeftMouseDown
处理程序,以便可以移动,删除等。
关于wpf - 是否可以仅针对右键事件将IsHitTestVisible设置为false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2088017/