考虑一下:
<ScrollViewer>
<!-- Several Controls /-->
<MyControl MouseMove="myMouseMoveHandler" />
<!-- Several Controls /-->
</ScrollViewer>
MyControl 是一个 HSV 颜色选择控件,其色谱在一个可以旋转的圆圈上,而所选色调的细微差别在一个三角形上。它看起来很棒,但遗憾的是我还不能发布图片(代表)。它确实需要能够处理其表面上各个方向的鼠标移动。
现在,当我在 MyControl 上移动鼠标(并且它正确处理移动)时,ScrollViewer 仍然滚动!
即使它是 ScrollViewer 中的唯一控件,移动在我的控件内开始和结束,和/或我在 MouseLeftButtonDown / -Up 事件中都设置了 e.Handled = true ,也会发生这种情况。在 ..Down 中使用 CaptureMouse() 和在 ..Up 中使用 ReleaseMouseCapture() 也无济于事。
您会同意我不能更改 ScrollViewer 实现(或者我可以吗?),并且我不能保证我的控件永远不会托管在 ScrollViewer 中(例如,因为我想发布它)。
必须可以防止 ScrollViewer 获取 MouseMove。证明:只需将 MyControl 替换为包含超过其高度的项目的 ListBox,您可以在没有 ScrollViewer 反应的情况下滑动 ListBox 项目。
但是怎么做?它也是 ListBox 内的 ScrollViewer 吗,这就是它在那里工作的原因,或者它也可以为我的控件完成?