首页 文章

如何确定当鼠标指针离开UIElement时是否按下了鼠标按钮

提问于
浏览
2

我一直在研究WPF中的一个GUI,我很新,直到现在才使用Windows Forms . 到目前为止,我的GUI非常简单:它包含两个矩形,每个矩形都会留下一个阴影 . 可以说,阴影会产生“漂浮在画布上方”的矩形效果 .

当按下其中一个矩形时,会处理 myRectangle.MouseDown 事件,使阴影消失,从而产生将矩形按下到画布上的效果,就像按钮一样 . 同样,当释放鼠标按钮时,将处理 myRectangle.MouseDown 事件,以便再次出现阴影和矩形"floats" . 这种行为使它们类似于按钮 . 请注意,有一个原因我希望它们是矩形而不是自定义按钮 .

这是我上面描述的一些代码:

Private Sub RectangleMouseDown(ByVal sender As Object, _
                               ByVal e As System.Windows.Input.MouseButtonEventArgs)
    Dim effectNoShadow As New Effects.DropShadowEffect
    effectNoShadow.Opacity = 0
    CType(sender, Rectangle).Effect = effectNoShadow
End Sub

Private Sub RectangleMouseUp(ByVal sender As Object, _
                             ByVal e As System.Windows.Input.MouseButtonEventArgs)
    Dim effectDropShadow As New Effects.DropShadowEffect
    effectDropShadow.Opacity = 1
    effectDropShadow.BlurRadius = 10
    effectDropShadow.ShadowDepth = 5
    CType(sender, Rectangle).Effect = effectDropShadow
End Sub

Private Sub AddHandlersToRectangles()
    For Each element As UIElement In MainGrid.Children
        If TypeOf element Is Rectangle Then                'If element is a Rectangle'
            AddHandler CType(element, Rectangle).MouseDown, AddressOf RectangleMouseDown
            AddHandler CType(element, Rectangle).MouseUp, AddressOf RectangleMouseUp
        End If
    Next
End Sub

到现在为止还挺好 . 我遇到问题的一个场景是,当鼠标按钮仍然按下时鼠标光标离开矩形时,矩形停留是永久的“按下”状态,因为很明显,按钮没有在矩形上方释放 .

有办法解决这个问题吗?我想看到的行为如下:

  • 如果指针在按下鼠标按钮时离开矩形,我想重新出现阴影 . 这可以说是简单的,因为理论上在这种情况下,任何时候_2561747都被提升,阴影应该重新开启,即使它已经存在 .

  • 如果按下鼠标按钮时指针留下一个矩形,然后在释放按钮之前返回,我希望阴影再次消失 . 这个是给我带来问题的 . 不知道怎么做 .

我试过 myRectangle.IsMouseCaptured ,这总是假的 . 在 UIElementRectangle 中是否有任何布尔值事件特别会对我有所帮助?

1 回答

  • 3

    MouseDown 事件中调用 myRectangle.CaptureMouse() ,即使鼠标移出矩形也会触发 MouseUp ,在 MouseUp 事件中检查 IsMouseCaptured 以查看 MouseDown 是否实际发生在矩形内并通过 myRectangle.ReleaseMouseCapture() 释放 .

    要检查鼠标是否正在离开你可能会处理 MouseMove 事件并查看鼠标是否仍在控件之上,我不确定 Mouse.DirectlyOver 在捕获期间是否会返回正确的值,我需要测试...

相关问题