Przegląd Adnotacje
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 dodamy do dokumentu, aby oznaczyć informacje o flagach lub wyróżnić interesujące elementy do późniejszego odwołania. 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
Typowa notatka lepka zawiera informacje zapisane na małym kawałku kolorowej papieru, który następnie "utknął" w dokumencie. Cyfrowe notatki sticky zapewniają podobne funkcje dla dokumentów elektronicznych, ale z dodatkową elastycznością, aby uwzględnić wiele innych typów zawartości, takich jak wpisany tekst, notatki odręczne (na przykład pociągnięcia "atrament" tabletu PC) lub linki internetowe.
Na poniższej ilustracji przedstawiono kilka przykładów wyróżniania, przyklejonego tekstu i adnotacji notatek lepkich pisma odkowego.
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 informacje
Osoby używać metod kreatywnych, aby zwrócić uwagę na interesujące elementy, gdy oznaczą dokument papierowy, taki jak podkreślenie, wyróżnianie, krążenie słów w zdaniu lub znaki rysunku lub notacje 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 opcje 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. Gdy widok dokumentu zmieni się (przewijanie, rozmiary, skalowanie lub w inny sposób przenosi), adnotacja wyróżnienia zostanie przeniesiona z oryginalnym wyborem danych.
Dopasowywanie adnotacji z obiektami z adnotacjami
Adnotacje można dopasować do odpowiednich obiektów z adnotacjami. 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