我一直在使用WPF中的GUI,我很新,直到现在才使用Windows Forms。到目前为止,我的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
,这总是错误的。在UIElement
或Rectangle
中是否有任何布尔值事件会对我有所帮助?
答案 0 :(得分:3)
在myRectangle.CaptureMouse()
事件中致电MouseDown
,即使鼠标移出矩形,MouseUp
也会被触发,在IsMouseCaptured
中检查MouseUp
} event以查看MouseDown
是否实际发生在矩形内并通过myRectangle.ReleaseMouseCapture()
释放。
要检查鼠标是否正在离开,您可能会处理MouseMove
事件并查看鼠标是否仍在控件之上,我不确定Mouse.DirectlyOver
在捕获期间是否会返回正确的值我需要测试一下......