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

时间:2012-04-21 13:57:45

标签: wpf richtextbox adornerlayer

我的richtextbox中有一个装饰图层。每当一个单词拼写错误时,我会在richtextbox的adornerlayer中添加一个装饰器。我希望能够右键单击装饰器并捕获该事件,但是当鼠标位于装饰元素上时,我不想失去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中找不到它。

我是否正确地进行了此操作,或者是否有更好的方法允许底层控件在其上方的元素需要能够接受鼠标事件时保持其光标。

感谢您的帮助!

0 个答案:

没有答案