Översikt över anteckningar
Att skriva anteckningar eller kommentarer på pappersdokument är en sådan vanlig aktivitet att vi nästan tar det för givet. Dessa anteckningar eller kommentarer är "anteckningar" som vi lägger till i ett dokument för att flagga information eller för att markera intressanta objekt för senare referens. Även om det är enkelt och vanligt att skriva anteckningar på tryckta dokument, är möjligheten att lägga till personliga kommentarer i elektroniska dokument vanligtvis mycket begränsad, om tillgänglig alls.
Det här avsnittet granskar flera vanliga typer av anteckningar, särskilt fästpunkter och markeringar, och illustrerar hur Microsoft Annotations Framework underlättar dessa typer av anteckningar i program via windows presentationsstiftelsens (WPF) dokumentvisningskontroller. WPF-dokumentvisningskontroller som stöder anteckningar inkluderar FlowDocumentReader och FlowDocumentScrollViewer, samt kontroller som härleds från DocumentViewerBase som DocumentViewer och FlowDocumentPageViewer.
Klisterlappar
En typisk fäst anteckning innehåller information som skrivits på en liten bit färgat papper som sedan "fastnar" i ett dokument. Digitala anteckningar ger liknande funktioner för elektroniska dokument, men med den extra flexibiliteten att inkludera många andra typer av innehåll, till exempel skriven text, handskrivna anteckningar (till exempel Pennstreck för Tablet PC) eller webblänkar.
Följande illustration visar några exempel på markeringar, textklisterlappar och bläckklisterlappar.
I följande exempel visas den metod som du kan använda för att aktivera anteckningsstöd i ditt program.
// ------------------------ 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
Höjdpunkter
Människor använder kreativa metoder för att uppmärksamma objekt av intresse när de markerar ett pappersdokument, till exempel understrykning, markering, cirklande ord i en mening eller ritmärken eller noteringar i marginalen. Markering av annotationer i Microsoft Annotations Framework ger en liknande funktion för att framhäva information som visas i WPF-dokumentvisningskontroller.
Följande bild visar ett exempel på en markeringsanteckning.
Användare skapar vanligtvis anteckningar genom att först välja text eller ett objekt av intresse och sedan högerklicka för att visa en ContextMenu med anteckningsalternativ. I följande exempel visas XAML (Extensible Application Markup Language) som du kan använda för att deklarera en ContextMenu med dirigerade kommandon som användarna kan komma åt för att skapa och hantera anteckningar.
<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 & Notes" />
</ContextMenu>
</DocumentViewer.ContextMenu>
Dataankring
Annotations Framework binder anteckningar till de data som användaren väljer, inte bara till en position i visningsvyn. Om dokumentvyn ändras, till exempel när användaren rullar eller ändrar storlek på visningsfönstret, förblir anteckningen med den datamarkering som den är bunden till. För exempel illustrerar följande bild en anteckning som användaren har gjort på ett textval. När dokumentvyn ändras (rullar, ändrar storlek, skalar eller på annat sätt flyttas) flyttas markeringen med den ursprungliga datamarkeringen.
Att matcha annoteringar med kommenterade objekt
Du kan matcha anteckningar med motsvarande kommenterade objekt. Tänk dig till exempel ett enkelt program för dokumentläsare som har ett kommentarsfönster. Kommentarsfönstret kan vara en listruta som visar texten från en lista med anteckningar som är förankrade i ett dokument. Om användaren väljer ett objekt i listrutan visar programmet stycket i dokumentet som motsvarande anteckningsobjekt är förankrat i.
I följande exempel visas hur du implementerar händelsehanteraren för en sådan listruta som fungerar som kommentarsfönstret.
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
Ett annat exempelscenario omfattar applikationer som möjliggör utbyte av anteckningar och klisterlappar mellan dokumentläsare via e-post. Med den här funktionen kan dessa program navigera läsaren till sidan som innehåller anteckningen som utbyts.
Se även
.NET Desktop feedback