在richtextbox中将鼠标移到装饰器上时WPF丢失插入符号位置

在richtextbox中将鼠标移到装饰器上时WPF丢失插入符号位置,wpf,richtextbox,adornerlayer,Wpf,Richtextbox,Adornerlayer,我的richtextbox中有一个装饰层。每当单词拼写错误时,我都会向richtextbox的adornerlayer添加一个装饰器。我希望能够右键单击装饰器并捕获该事件,但我不希望在鼠标位于装饰元素上时丢失richtextbox的caretposition 我已尝试将IshtestVisible设置为False。这可以防止鼠标在我想要的装饰元素上时变为指针,这样我就可以单击底层的richtextbox,但这会使rightmousebutton单击捕获复杂化 Protected Sub Edit

我的richtextbox中有一个装饰层。每当单词拼写错误时,我都会向richtextbox的adornerlayer添加一个装饰器。我希望能够右键单击装饰器并捕获该事件,但我不希望在鼠标位于装饰元素上时丢失richtextbox的caretposition

我已尝试将IshtestVisible设置为False。这可以防止鼠标在我想要的装饰元素上时变为指针,这样我就可以单击底层的richtextbox,但这会使rightmousebutton单击捕获复杂化

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
这允许我捕获rightmousebutton单击,但它似乎只在我在adornedElement底部单击鼠标右键时起作用。如果我尝试在adornedElement的主体中单击,则在测试中找不到它

我这样做是正确的,还是有更好的方法允许底层控件在其上的元素需要能够接受鼠标事件时保持它

谢谢你的帮助