Freigeben über


Übersicht über Anmerkungen

Das Schreiben von Notizen oder Kommentaren auf Papierdokumenten ist so üblich, dass wir es fast selbstverständlich nehmen. Diese Notizen oder Kommentare sind "Anmerkungen", die wir einem Dokument hinzufügen, um Informationen zu kennzeichnen oder elemente hervorzuheben, die für spätere Verweise interessant sind. Obwohl das Schreiben von Notizen auf gedruckten Dokumenten einfach und üblich ist, ist die Möglichkeit, persönliche Kommentare zu elektronischen Dokumenten hinzuzufügen, in der Regel sehr begrenzt, sofern überhaupt verfügbar.

In diesem Thema werden mehrere allgemeine Arten von Anmerkungen überprüft, insbesondere Kurznotizen und Hervorhebungen, und es wird veranschaulicht, wie das Microsoft Annotations Framework diese Arten von Anmerkungen in Anwendungen über die Windows Presentation Foundation (WPF)-Dokumentanzeigesteuerelemente erleichtert. WPF-Dokumentanzeigesteuerelemente, die Anmerkungen unterstützen, umfassen FlowDocumentReader und FlowDocumentScrollViewersowie Steuerelemente, die von DocumentViewerBase wie DocumentViewer und FlowDocumentPageViewerabgeleitet sind.

Kurznotizen

Eine normale Kurznotiz enthält Informationen, die auf ein kleines Stück farbiges Papier geschrieben werden, das dann auf ein Dokument „geklebt“ wird. Digitale Kurznotizen bieten ähnliche Funktionen für elektronische Dokumente, jedoch mit der zusätzlichen Flexibilität, viele andere Inhaltstypen wie eingegebenen Text, handschriftliche Notizen (z. B. Freihandeingabestriche auf Tablet-PCs) oder Weblinks einzuschließen.

Die folgende Abbildung zeigt einige Beispiele von Textmarker-, Text- und Freihandnotizanmerkungen.

Textmarker-, Text- und Freihandnotizanmerkungen

Das folgende Beispiel zeigt die Methode, mit der Sie die Anmerkungsunterstützung in Ihrer Anwendung aktivieren können.

// ------------------------ StartAnnotations --------------------------
/// <summary>
///   Enables annotations and displays all that are viewable.</summary>
private void StartAnnotations()
{
    // If there is no AnnotationService yet, create one.
    if (_annotService == null)
        // docViewer is a document viewing control named in Window1.xaml.
        _annotService = new AnnotationService(docViewer);

    // If the AnnotationService is currently enabled, disable it.
    if (_annotService.IsEnabled == true)
        _annotService.Disable();

    // Open a stream to the file for storing annotations.
    _annotStream = new FileStream(
        _annotStorePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);

    // Create an AnnotationStore using the file stream.
    _annotStore = new XmlStreamStore(_annotStream);

    // Enable the AnnotationService using the new store.
    _annotService.Enable(_annotStore);
}// end:StartAnnotations()
' ------------------------ StartAnnotations --------------------------
''' <summary>
'''   Enables annotations and displays all that are viewable.</summary>
Private Sub StartAnnotations()
    ' If there is no AnnotationService yet, create one.
    If _annotService Is Nothing Then
        ' docViewer is a document viewing control named in Window1.xaml.
        _annotService = New AnnotationService(docViewer)
    End If

    ' If the AnnotationService is currently enabled, disable it.
    If _annotService.IsEnabled = True Then
        _annotService.Disable()
    End If

    ' Open a stream to the file for storing annotations.
    _annotStream = New FileStream(_annotStorePath, FileMode.OpenOrCreate, FileAccess.ReadWrite)

    ' Create an AnnotationStore using the file stream.
    _annotStore = New XmlStreamStore(_annotStream)

    ' Enable the AnnotationService using the new store.
    _annotService.Enable(_annotStore)
End Sub

Markierungen

Benutzer verwenden kreative Methoden, um auf interessante Elemente aufmerksam zu machen, wenn sie ein Papierdokument markieren, z. B. Unterstreichung, Hervorhebung, Kreisen von Wörtern in einem Satz oder Zeichenzeichen oder Notationen am Rand. Das Markieren von Anmerkungen in Microsoft Annotations Framework bietet ein ähnliches Feature zum Markieren von Informationen, die in Anzeigesteuerelementen des WPF-Dokuments angezeigt wird.

In der folgenden Abbildung ist ein Beispiel einer Textmarkeranmerkung dargestellt:

Textmarkeranmerkung

Benutzende erstellen Anmerkungen in der Regel, indem Sie zunächst Text oder ein Element von Interesse auswählen und dann mit der rechten Maustaste darauf klicken, um ein ContextMenu mit Anmerkungsoptionen anzuzeigen. Im folgenden Beispiel wird der XAML-Code (Extensible Application Markup Language) gezeigt, den Sie zum Deklarieren von ContextMenu mit weitergeleiteten Befehlen verwenden können, auf die Benutzer zugreifen können, um Anmerkungen zu erstellen und zu verwalten.

<DocumentViewer.ContextMenu>
  <ContextMenu>
    <MenuItem Command="ApplicationCommands.Copy" />
    <Separator />
    <!-- Add a Highlight annotation to a user selection. -->
    <MenuItem Command="ann:AnnotationService.CreateHighlightCommand"
              Header="Add Highlight" />
    <!-- Add a Text Note annotation to a user selection. -->
    <MenuItem Command="ann:AnnotationService.CreateTextStickyNoteCommand"
              Header="Add Text Note" />
    <!-- Add an Ink Note annotation to a user selection. -->
    <MenuItem Command="ann:AnnotationService.CreateInkStickyNoteCommand"
              Header="Add Ink Note" />
    <Separator />
    <!-- Remove Highlights from a user selection. -->
    <MenuItem Command="ann:AnnotationService.ClearHighlightsCommand"
              Header="Remove Highlights" />
    <!-- Remove Text Notes and Ink Notes from a user selection. -->
    <MenuItem Command="ann:AnnotationService.DeleteStickyNotesCommand"
              Header="Remove Notes" />
    <!-- Remove Highlights, Text Notes, Ink Notes from a selection. -->
    <MenuItem Command="ann:AnnotationService.DeleteAnnotationsCommand"
              Header="Remove Highlights &amp; Notes" />
  </ContextMenu>
</DocumentViewer.ContextMenu>

Verankerung von Daten

Das Annotations Framework bindet Anmerkungen an die Daten, die der Benutzer auswählt, nicht nur an eine Position in der Anzeigeansicht. Wenn sich die Dokumentansicht ändert, z. B. wenn der Benutzer scrollt oder die Größe des Anzeigefensters ändert, bleibt die Anmerkung bei der Datenauswahl, an die sie gebunden ist. Die folgende Abbildung zeigt z. B. eine Anmerkung, die eine benutzende Person für einen Textausschnitt erstellt hat. Wenn sich die Dokumentansicht ändert (durch Bildlauf, Größenänderung, Skalierung usw.), wird die Textmarkeranmerkung mit den ausgewählten Daten verschoben.

Verankerung von Anmerkungsdaten

Abgleichen von Anmerkungen mit Objekten mit Anmerkungen

Sie können Anmerkungen mit den entsprechenden kommentierten Objekten abgleichen. Betrachten Sie beispielsweise eine einfache Dokumentleseanwendung mit einem Kommentarbereich. Der Kommentarbereich kann ein Listenfeld sein, in dem der Text aus einer Liste von Anmerkungen angezeigt wird, die in einem Dokument verankert sind. Wenn der Benutzer ein Element im Listenfeld auswählt, zeigt die Anwendung den Absatz im Dokument an, an dem das entsprechende Anmerkungsobjekt verankert ist.

Im folgenden Beispiel wird veranschaulicht, wie der Ereignishandler eines solchen Listenfelds implementiert wird, das als Kommentarbereich dient.

void annotationsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{

    Annotation comment = (sender as ListBox).SelectedItem as Annotation;
    if (comment != null)
    {
        // IAnchorInfo info;
        // service is an AnnotationService object
        // comment is an Annotation object
        info = AnnotationHelper.GetAnchorInfo(this.service, comment);
        TextAnchor resolvedAnchor = info.ResolvedAnchor as TextAnchor;
        TextPointer textPointer = (TextPointer)resolvedAnchor.BoundingStart;
        textPointer.Paragraph.BringIntoView();
    }
}
Private Sub annotationsListBox_SelectionChanged(ByVal sender As Object, ByVal e As SelectionChangedEventArgs)

    Dim comment As Annotation = TryCast((TryCast(sender, ListBox)).SelectedItem, Annotation)
    If comment IsNot Nothing Then
        ' service is an AnnotationService object
        ' comment is an Annotation object
        info = AnnotationHelper.GetAnchorInfo(Me.service, comment)
        Dim resolvedAnchor As TextAnchor = TryCast(info.ResolvedAnchor, TextAnchor)
        Dim textPointer As TextPointer = CType(resolvedAnchor.BoundingStart, TextPointer)
        textPointer.Paragraph.BringIntoView()
    End If
End Sub

Ein weiteres Beispielszenario umfasst Anwendungen, die den Austausch von Anmerkungen und Kurznotizen zwischen Dokumentlesern per E-Mail ermöglichen. Dieses Feature ermöglicht diesen Anwendungen, die Lesenden zu der Seite zu navigieren, die die Anmerkung enthält, die gerade ausgetauscht wird.

Weitere Informationen