Хммм. Я, вероятно, сделал бы это с adorner :
Imports System.Windows
Imports System.Windows.Documents
Imports System.Windows.Media
Public Class Annotation
Inherits Adorner
Private _fill As Brush
Private _pen As Pen
Private _text As FormattedText
Private _annotationText as String
Public Sub New(ByVal adornedElement As UIElement, ByVal annotationText as String)
MyBase.New(adornedElement)
_annotationText = annotationText
_fill = New SolidColorBrush(Color.FromArgb(&H33, &HB0, &HC4, &HDE))
_fill.Freeze()
_pen = New Pen(Brushes.LightSteelBlue, 3.0)
_pen.Freeze()
_text = New FormattedText(_annotationText, Globalization.CultureInfo.InvariantCulture, FlowDirection.LeftToRight, New Typeface("Verdana"), 11.0, Brushes.Black)
Me.IsHitTestVisible = False
End Sub
Protected Overrides Sub OnRender(ByVal drawingContext As DrawingContext)
MyBase.OnRender(drawingContext)
Dim adornedRect As New Rect(MyBase.AdornedElement.RenderSize)
drawingContext.DrawRectangle(_fill, _pen, adornedRect)
drawingContext.DrawText(_text, New Point(0,0))
End Sub
End Class
И тогда вы будете использовать его:
Private Sub AddAnnotation(ByVal uie As UIElement, ByVal annotationText as String)
Dim annotation = New Annotation(uie)
Dim adornerLayer = AdornerLayer.GetAdornerLayer(uie, annotationText)
adornerLayer.Add(annotation)
End Sub
Я оставлю вас, чтобы отрегулировать положение и фактическое появление аннотации, но вы поняли идею. Это будет работать для любого UIElement, включая пользовательские элементы управления.
Это был неожиданный ответ, основанный на какой-то другой работе, которую я проделал с Adorners. Выше кода может или не может скомпилировать. Я не предоставил способ редактировать аннотации, но вы можете легко сделать это, удалив строку «Me.IsHitTestVisible = False» и обработав события MouseUp в панели управления.