5

注釈をサポートする WPF ドキュメント表示コントロールには、FlowDocumentReader と FlowDocumentScrollViewer、および DocumentViewer と FlowDocumentPageViewer などの DocumentViewerBase から派生したコントロールが含まれます。

ドキュメント ベースのコントロールの組み込みの注釈サポートは、WPF で素晴らしいです

Button、TextBox、ListBox アイテムなどの WPF 共通コントロールに機能を追加する方法を考えていました。アイデアは、ユーザーが UI 画面上のいくつかのコメントを別のユーザーに渡すことができるようにすることです。

最初に頭に浮かぶのは、DocumentViewerBase から継承し、独自のカスタム コントロールを作成することです。それがどのように機能するかはわかりません。非カスタム コントロールに注釈を付ける必要がある場合はどうなりますか?

この種の機能を機能させたり見たりした人はいますか?

どんな指示も役に立ちます。

4

1 に答える 1

5

うーん。私はおそらく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 イベントを処理することで簡単に編集できます。

于 2009-02-03T15:12:20.800 に答える