2

我一直在 WPF 中开发一个 GUI,我对它还很陌生,到目前为止只使用过 Windows 窗体。到目前为止,我的 GUI 非常简单:它包含两个矩形,每个矩形都有一个阴影。可以说,阴影会产生“漂浮在画布上方”的矩形效果。

当按下其中一个矩形时,myRectangle.MouseDown会处理事件以使阴影消失,从而创建矩形被按下到画布上的效果,就像按钮一样。类似地,当鼠标按钮被释放时,myRectangle.MouseDown事件被处理使得阴影重新出现并且矩形再次“浮动”。这种行为使它们类似于按钮。请注意,我希望它们是矩形而不是自定义按钮是有原因的。

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

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

到目前为止,一切都很好。我遇到问题的一种情况是,当鼠标光标离开矩形而鼠标按钮仍被按下时,矩形永远保持“按下”状态,因为显然,按钮没有在矩形上方释放.

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

  • 如果在按下鼠标按钮时指针离开矩形,我希望阴影重新出现。这可以说很简单,因为理论上在这种情况下,任何时间myRectangle.MouseLeave被提升,阴影都应该重新出现,即使它已经存在。
  • 如果在按下鼠标按钮时指针离开了一个矩形,然后在释放按钮之前又回来了,我希望阴影再次消失。这给我带来了问题。不知道该怎么做。

我试过myRectangle.IsMouseCaptured了,这总是错误的。是否有任何布尔值事件UIElementRectangle特别可以帮助我解决这个问题?

4

1 回答 1

3

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

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

于 2011-04-06T20:04:43.603 回答