支持注释的WPF文档查看控件包括FlowDocumentReader和FlowDocumentScrollViewer,以及从DocumentViewerBase派生的控件,如DocumentViewer和FlowDocumentPageViewer.
内置的Annotations支持基于文档的控件在WPF中非常棒
我想知道如何将功能添加到WPF常用控件,如Button,TextBox,ListBox项等.想法是允许用户将UI屏幕上的一些注释传递给另一个用户.
首先想到的是继承DocumentViewerBase并创建自己的自定义控件.我不确定它会如何发挥作用.如果需要注释非自定义控件会怎样?
有没有人工作或看过这种功能?
任何指示都会有所帮助.
嗯.我可能会与一个装饰师这样做:
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事件来轻松完成.