WPF自定义面板控件不响应鼠标事件

时间:2011-01-13 14:31:08

标签: wpf wpf-controls

我已经创建了一个自定义面板控件,并希望让它响应鼠标移动事件,但是,当我添加一个这样的事件处理程序时:

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

谢谢你, 马特

2 个答案:

答案 0 :(得分:3)

出于命中测试的目的,WPF的默认命中测试逻辑有两种透明模式。一个是视觉透明的,也可以进行测试(#00000000或完全不设置背景),另一个只是在视觉上是透明的,并不排除命中测试(## 00ffffff)。你想要后者。

我相信您也可以覆盖自定义UIElement.HitTestCore中的Panel,以便不依赖于设置背景。

答案 1 :(得分:1)

我实际上怀疑这可能是这里的问题;如果控件的背景为null并且没有其他子组件,那么您的鼠标不会在控件之间移动,而是在其后面的控件上移动,因此您不会从中获取鼠标事件(这不是非常期待的)虽然因为控制的范围可能包围该区域。)