1

我的richtextbox 中有一个装饰层。每当一个单词拼错时,我都会在richtextbox 的装饰层中添加一个装饰器。我希望能够右键单击装饰器并捕获该事件,但是当鼠标悬停在装饰元素上时,我不想丢失richtextbox 的插入符号。

我试过设置 IsHitTestVisible=False。当我像我想要的那样在装饰元素上方时,这可以防止鼠标变为指针,以便我可以单击底层的richtextbox,但它会使鼠标右键单击捕获复杂化。

Protected Sub Editor_PreviewRightMouseButtonUp(ByVal sender As Object, ByVal e As MouseEventArgs)

    ' Retreive the coordinates of the mouse button event.
    Dim pt As Point = e.GetPosition(CType(sender, UIElement))

    ' Initiate the hit test by setting up a hit test result callback method.
    VisualTreeHelper.HitTest(Me, Nothing, New HitTestResultCallback(AddressOf HitTestCallBack_PreviewRightMouseButtonUp), New PointHitTestParameters(pt))
    e.Handled = True
End Sub

Public Function HitTestCallBack_PreviewRightMouseButtonUp(ByVal result As HitTestResult) As HitTestResultBehavior
    If result.VisualHit.GetType() Is GetType(HighLightAdorner) Then
        Dim adornerControl As HighLightAdorner = DirectCast(result.VisualHit, HighLightAdorner)
        Dim e = New MouseButtonEventArgs(Mouse.PrimaryDevice, Environment.TickCount, MouseButton.Right)
        e.RoutedEvent = Mouse.PreviewMouseUpEvent
        adornerControl.RaiseEvent(e)
        Return HitTestResultBehavior.Stop
    End If
    Return HitTestResultBehavior.Continue
End Function

这使我可以捕获鼠标右键单击,但它似乎仅在我单击 adornedElement 底部的右侧时才起作用。如果我尝试单击 adornedElement 的主体,它不会在 hitTesting 中找到它。

我是正确地解决这个问题还是有更好的方法来允许底层控件在其上方的元素需要能够接受鼠标事件时保持它的光标。

谢谢您的帮助!

4

0 回答 0