Adnotacje — omówienie
Pisanie notatek lub komentarzy na dokumentach papierowych jest tak powszechną aktywnością, którą prawie bierzemy za pewnik. Te notatki lub komentarze są "adnotacjami", które dodajemy do dokumentu, aby zaznaczyć informacje lub wyróżnić interesujące elementy do późniejszego wykorzystania. Chociaż pisanie notatek na dokumentach drukowanych jest łatwe i powszechne, możliwość dodawania komentarzy osobistych do dokumentów elektronicznych jest zwykle bardzo ograniczona, jeśli jest dostępna w ogóle.
W tym temacie omówiono kilka typowych typów adnotacji, w szczególności notatek przyklejanych i wyróżnianych oraz pokazano, jak struktura adnotacji firmy Microsoft ułatwia korzystanie z tych typów adnotacji w aplikacjach za pośrednictwem kontrolek wyświetlania dokumentów w programie Windows Presentation Foundation (WPF). Kontrolki wyświetlania dokumentów WPF, które obsługują adnotacje, obejmują FlowDocumentReader i FlowDocumentScrollViewer, a także kontrolki pochodzące z DocumentViewerBase, takich jak DocumentViewer i FlowDocumentPageViewer.
Karteczki samoprzylepne
Typowa karteczka samoprzylepna zawiera informacje zapisane na małym kawałku kolorowego papieru, który następnie jest przyklejany do dokumentu. Cyfrowe karteczki samoprzylepne oferują podobne funkcje dla dokumentów elektronicznych, ale z dodatkową elastycznością umożliwiającą uwzględnienie wielu innych typów zawartości, takich jak wpisany tekst, odręczne notatki (na przykład cyfrowe pociągnięcia piórem na tablecie PC) lub odnośniki internetowe.
Na poniższej ilustracji przedstawiono kilka przykładów podkreśleń, przylepnej notatki tekstowej i przylepnej notatki atramentowej.
W poniższym przykładzie przedstawiono metodę, której można użyć do włączenia obsługi adnotacji w aplikacji.
// ------------------------ 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
Najważniejsze punkty
Ludzie używają kreatywnych metod, aby zwrócić uwagę na elementy budzące zainteresowanie, oznaczając dokument papierowy, na przykład przez podkreślenie, zakreślenie, okrążenie słów w zdaniu lub wykonanie znaków albo notacji na marginesie. Wyróżnianie adnotacji w programie Microsoft Annotations Framework zapewnia podobną funkcję do oznaczania informacji wyświetlanych w kontrolkach wyświetlania dokumentów WPF.
Na poniższej ilustracji przedstawiono przykład adnotacji wyróżnienia.
Użytkownicy zazwyczaj tworzą adnotacje, wybierając najpierw tekst lub interesujący go element, a następnie klikając prawym przyciskiem myszy, aby wyświetlić ContextMenu opcji adnotacji. W poniższym przykładzie przedstawiono rozszerzalny język znaczników aplikacji (XAML), którego można użyć do deklarowania ContextMenu za pomocą poleceń kierowanych, do których użytkownicy mogą uzyskiwać dostęp do tworzenia adnotacji i zarządzania nimi.
<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>
Zakotwiczenie danych
Struktura adnotacji wiąże adnotacje z danymi wybranymi przez użytkownika, a nie tylko z pozycją w widoku wyświetlania. W związku z tym, jeśli widok dokumentu zmieni się, na przykład gdy użytkownik przewija lub zmienia rozmiar okna wyświetlania, adnotacja pozostaje z wyborem danych, do którego jest powiązany. Na przykład poniższa grafika ilustruje adnotację, którą użytkownik dokonał w zaznaczeniu tekstu. Kiedy widok dokumentu zmienia się (przewijana, zmienia rozmiar, skaluje lub porusza się w inny sposób), adnotacja wyróżnienia porusza się wraz z oryginalnym wyborem danych.
Dopasowywanie adnotacji z obiektami z adnotacjami
Można dopasować adnotacje do odpowiednich obiektów. Rozważmy na przykład prostą aplikację czytnika dokumentów z okienkiem komentarzy. Okienko komentarzy może być polem listy, które wyświetla tekst z listy adnotacji, które są zakotwiczone do dokumentu. Jeśli użytkownik wybierze element w polu listy, aplikacja wyświetli akapit w dokumencie, do którego jest zakotwiczony odpowiedni obiekt adnotacji.
W poniższym przykładzie pokazano, jak zaimplementować procedurę obsługi zdarzeń takiego pola listy, które służy jako okienko komentarzy.
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
Inny przykładowy scenariusz obejmuje aplikacje, które umożliwiają wymianę adnotacji i notatek lepkich między czytnikami dokumentów za pośrednictwem poczty e-mail. Ta funkcja umożliwia tym aplikacjom nawigowanie po czytniku do strony zawierającej wymienianą adnotację.
Zobacz też
.NET Desktop feedback