1

リッチテキストボックスに装飾レイヤーがあります。単語のつづりが間違っているときはいつでも、richtextbox の adornerlayer に adorner を追加します。アドナーを右クリックしてそのイベントをキャプチャできるようにしたいのですが、マウスが装飾された要素の上にあるときにリッチテキストボックスのキャレット位置を失いたくありません。

IsHitTestVisible=False を設定してみました。これにより、装飾された要素の上にあるときにマウスがポインターに変化しないようにして、基になるリッチテキストボックスをクリックできるようにしますが、マウスの右ボタンのクリックキャプチャが複雑になります。

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