Delen via


Overzicht van aantekeningen

Het schrijven van notities of opmerkingen op papieren documenten is zo'n veelvoorkomende activiteit dat we het bijna als vanzelfsprekend beschouwen. Deze notities of opmerkingen zijn aantekeningen die we aan een document toevoegen om informatie te markeren of om nuttige items te markeren voor later gebruik. Hoewel het schrijven van notities op afgedrukte documenten eenvoudig en gebruikelijk is, is de mogelijkheid om persoonlijke opmerkingen toe te voegen aan elektronische documenten meestal zeer beperkt, indien beschikbaar.

In dit onderwerp worden verschillende veelvoorkomende typen aantekeningen besproken, met name plaknotities en markeringen, en wordt uitgelegd hoe het Microsoft Annotations Framework dit soort aantekeningen in toepassingen mogelijk maakt via de wpf-besturingselementen (Windows Presentation Foundation) voor documentweergave. WPF-besturingselementen voor documentweergave die aantekeningen ondersteunen, zijn onder andere FlowDocumentReader en FlowDocumentScrollViewer, evenals besturingselementen die zijn afgeleid van DocumentViewerBase zoals DocumentViewer en FlowDocumentPageViewer.

Kleefbriefjes

Een typische plaknotitie bevat informatie die is geschreven op een klein stukje gekleurd papier dat vervolgens 'vastzit' aan een document. Digitale plaknotities bieden vergelijkbare functionaliteit voor elektronische documenten, maar met de extra flexibiliteit om veel andere soorten inhoud op te nemen, zoals getypte tekst, handgeschreven notities (bijvoorbeeld pennenstreken van tablet-pc) of webkoppelingen.

In de volgende afbeelding ziet u enkele voorbeelden van markeringen, tekstplaknotities en inktplaknotities.

Markeer, tekst- en inkaantekeningen op plaknotities.

In het volgende voorbeeld ziet u de methode die u kunt gebruiken om ondersteuning voor aantekeningen in uw toepassing in te schakelen.

// ------------------------ 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

Hoogtepunten

Mensen gebruiken creatieve methoden om aandacht te vestigen op interessante items wanneer ze een papieren document markeren, zoals onderstrepen, markeren, omcirkelen van woorden in een zin of tekenmarkeringen of notaties in de marge. Markeringen in het Microsoft Annotations Framework bieden een vergelijkbare functie voor het markeren van informatie die wordt weergegeven in WPF-documentweergave-elementen.

In de volgende afbeelding ziet u een voorbeeld van een markeringsaantekening.

Aantekeningen markeren

Gebruikers maken meestal aantekeningen door eerst tekst of een interessant item te selecteren en vervolgens met de rechtermuisknop te klikken om een ContextMenu met opties voor aantekeningen weer te geven. In het volgende voorbeeld ziet u de Extensible Application Markup Language (XAML) die u kunt gebruiken om een ContextMenu te declareren met gerouteerde opdrachten waartoe gebruikers toegang hebben om aantekeningen te maken en beheren.

<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>

Gegevensankering

Het Annotations Framework verbindt aantekeningen aan de gegevens die de gebruiker selecteert, niet alleen aan een positie op de weergave. Als de documentweergave verandert, bijvoorbeeld wanneer de gebruiker door het weergavevenster schuift of het formaat ervan wijzigt, blijft de aantekening behouden bij de gegevensselectie waaraan deze is gebonden. In de volgende afbeelding ziet u bijvoorbeeld een aantekening die de gebruiker heeft gemaakt voor een tekstselectie. Wanneer de documentweergave wordt gewijzigd (schuift, het formaat ervan wijzigt, schaalt of anderszins verplaatst), wordt de markeringsaantekening verplaatst met de oorspronkelijke gegevensselectie.

annotatiegegevensankering

Aantekeningen vergelijken met geannoteerde objecten

U kunt aantekeningen vergelijken met de bijbehorende geannoteerde objecten. Denk bijvoorbeeld aan een eenvoudige toepassing voor documentlezers met een opmerkingenvenster. Het opmerkingenvenster kan een keuzelijst zijn waarin de tekst wordt weergegeven uit een lijst met aantekeningen die zijn verankerd aan een document. Als de gebruiker een item in de keuzelijst selecteert, wordt in de toepassing de alinea in het document weergegeven waarnaar het bijbehorende aantekeningsobject is verankerd.

In het volgende voorbeeld ziet u hoe u de gebeurtenis-handler van een dergelijke keuzelijst implementeert die fungeert als het opmerkingenvenster.

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

Een ander voorbeeldscenario omvat toepassingen die de uitwisseling van aantekeningen en plaknotities tussen documentlezers via e-mail mogelijk maken. Met deze functie kunnen deze toepassingen de lezer naar de pagina leiden die de uitgewisselde aantekening bevat.

Zie ook