3

显然,对这个问题的直截了当的回答是“否”,但对我来说达到这种效果的最佳方法是什么?为了解释,这里有一些背景......

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

这是一个基本图(尽管分解为 3D),说明了层的排列方式以及它们具有/需要的交互:


重叠控制.png http://www.afterbang.co.uk/mal/stackoverflow/overlapped_controls.png


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

我真的很想只将鼠标左键的事件捕获顶层的透明区域中,并让其他事件在 z 顺序的下方进一步命中层。

对于这种事情,我应该遵循 WPF 模式吗?有什么最佳实践或技术吗?

我对 WPF 还很陌生,但想编写一个与 API 一致的解决方案。谢谢。

4

1 回答 1

1

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

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

于 2010-01-18T17:50:31.630 回答