我一直在研究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
,这总是假的 . 在 UIElement
或 Rectangle
中是否有任何布尔值事件特别会对我有所帮助?
1 回答
在
MouseDown
事件中调用myRectangle.CaptureMouse()
,即使鼠标移出矩形也会触发MouseUp
,在MouseUp
事件中检查IsMouseCaptured
以查看MouseDown
是否实际发生在矩形内并通过myRectangle.ReleaseMouseCapture()
释放 .要检查鼠标是否正在离开你可能会处理
MouseMove
事件并查看鼠标是否仍在控件之上,我不确定Mouse.DirectlyOver
在捕获期间是否会返回正确的值,我需要测试...