リッチテキストボックスに装飾レイヤーがあります。単語のつづりが間違っているときはいつでも、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 で見つかりません。
私はこれを正しく行っていますか、またはその上の要素がマウスイベントを受け入れることができる必要があるときに、基になるコントロールがカーソルを維持できるようにするより良い方法がありますか?
助けてくれてありがとう!