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

标签 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一致的解决方案。谢谢。

最佳答案

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

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

关于wpf - 是否可以仅针对右键事件将IsHitTestVisible设置为false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2088017/

相关文章:

设置为黑色时的 WPF 菜单项颜色在禁用时不会更改为灰色

c# - Caliburn NotifyOfPropertyChanged : System. InvalidCastException

javascript 事件似乎混淆了

JavaScript - addEventListener "click"不起作用

c# - 当鼠标在控件上方时如何消除 ToolStripDropDownButton 上的蓝色焦点

wpf - UIElement 与 FrameworkElement

具有许多用户控件的 WPF 应用程序

java - DB中应触发定时事件的记录 = 如何高效实现?

c# uwp指针位置

Eclipse:仅使用键盘重新运行最后一个 gradle 任务