我已经创建了一个自定义面板控件,并希望让它响应鼠标移动事件,但是,当我添加一个这样的事件处理程序时:
Private Sub FloatingPanel_MouseMove(ByVal sender As Object,
ByVal e As MouseEventArgs) Handles Me.MouseMove
End Sub
仅当我将鼠标移动到面板中的一个子控件上时,它才会响应。每当我将鼠标移动到自定义面板内的任何位置时,我都需要让它响应。
更新 我发现以下问题给了我一个线索:
WPF - how to best implement a panel with draggable/zoomable children?
我可以获得鼠标事件 GraphCanvas本身只有它有一个 背景
这导致我只是设置了解决问题的背景......我现在的问题是,为什么?为什么我必须设置背景才能接收mousemove事件?
更新2:以下代码最终解决了问题(请参阅下面肯特的回答)。
Protected Overrides Function HitTestCore(ByVal hitTestParameters As System.Windows.Media.PointHitTestParameters) As System.Windows.Media.HitTestResult
Return New PointHitTestResult(Me, hitTestParameters.HitPoint)
End Function
谢谢你, 马特
答案 0 :(得分:3)
出于命中测试的目的,WPF的默认命中测试逻辑有两种透明模式。一个是视觉透明的,也可以进行测试(#00000000或完全不设置背景),另一个只是在视觉上是透明的,并不排除命中测试(## 00ffffff)。你想要后者。
我相信您也可以覆盖自定义UIElement.HitTestCore
中的Panel
,以便不依赖于设置背景。
答案 1 :(得分:1)
我实际上怀疑这可能是这里的问题;如果控件的背景为null并且没有其他子组件,那么您的鼠标不会在控件之间移动,而是在其后面的控件上移动,因此您不会从中获取鼠标事件(这不是非常期待的)虽然因为控制的范围可能包围该区域。)