Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Escribir notas o comentarios en documentos de papel es una actividad tan común que casi lo tomamos por hecho. Estas notas o comentarios son "anotaciones" que agregamos a un documento para marcar información o para resaltar elementos de interés para referencia posterior. Aunque escribir notas en documentos impresos es fácil y común, la capacidad de agregar comentarios personales a documentos electrónicos suele ser muy limitada, si está disponible en absoluto.
En este tema se revisan varios tipos comunes de anotaciones, específicamente notas y resaltados permanentes, y se muestra cómo Microsoft Annotations Framework facilita estos tipos de anotaciones en aplicaciones a través de los controles de visualización de documentos de Windows Presentation Foundation (WPF). Los controles de visualización de documentos de WPF que admiten anotaciones incluyen FlowDocumentReader y FlowDocumentScrollViewer, así como controles derivados de DocumentViewerBase como DocumentViewer y FlowDocumentPageViewer.
Notas rápidas
Una nota pegajosa típica contiene información escrita en un pequeño trozo de papel coloreado que luego se "bloquea" en un documento. Las notas adhesivas digitales proporcionan una funcionalidad similar para documentos electrónicos, pero con la flexibilidad adicional de incluir muchos otros tipos de contenido, como texto escrito, notas manuscritas (por ejemplo, trazos de "tinta" de Tablet PC) o enlaces web.
En la ilustración siguiente se muestran algunos ejemplos de resaltado, nota pegajosa de texto y anotaciones de notas pegajosas de lápiz.
En el ejemplo siguiente se muestra el método que puede usar para habilitar la compatibilidad con anotaciones en la aplicación.
// ------------------------ 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
Resúmenes
Las personas, cuando marcan un documento de papel, usan métodos creativos para llamar la atención a los elementos de interés, como el subrayado, el resaltado, el círculo de palabras en una oración o dibujar marcas o hacer anotaciones en el margen. Las anotaciones destacadas en Microsoft Annotations Framework proporcionan una característica similar para anotar la información mostrada en los controles de visualización de documentos de WPF.
En la ilustración siguiente se muestra un ejemplo de una anotación de resaltado.
Los usuarios suelen crear anotaciones seleccionando primero texto o elemento de interés y, a continuación, haciendo clic con el botón derecho para mostrar una ContextMenu de las opciones de anotación. En el ejemplo siguiente se muestra el lenguaje de marcado extensible de aplicaciones (XAML) que puedes usar para declarar un ContextMenu con comandos enrutados a los que los usuarios pueden acceder para crear y administrar anotaciones.
<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>
Anclaje de datos
Annotations Framework enlaza anotaciones a los datos que selecciona el usuario, no solo a una posición en la vista de visualización. Por lo tanto, si la vista del documento cambia, como cuando el usuario se desplaza o cambia el tamaño de la ventana de presentación, la anotación permanece con la selección de datos a la que está enlazado. Por ejemplo, el siguiente gráfico muestra una anotación que el usuario ha realizado en una selección de texto. Cuando cambia la vista de documento (se desplaza, cambia el tamaño, se escala o se mueve de otro modo), la anotación de resaltado se mueve con la selección de datos original.
Coincidencia de anotaciones con objetos anotados
Puede hacer coincidir las anotaciones con los objetos anotados correspondientes. Por ejemplo, considere una aplicación de lector de documentos sencilla que tenga un panel de comentarios. El panel de comentarios puede ser un cuadro de lista que muestra el texto de una lista de anotaciones que están ancladas a un documento. Si el usuario selecciona un elemento en el cuadro de lista, la aplicación muestra el párrafo del documento al que está anclado el objeto de anotación correspondiente.
En el ejemplo siguiente se muestra cómo implementar el controlador de eventos de este tipo de cuadro de lista que actúa como panel de comentarios.
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
Otro escenario de ejemplo implica aplicaciones que permiten el intercambio de anotaciones y notas permanentes entre lectores de documentos a través del correo electrónico. Esta característica permite a estas aplicaciones hacer que el lector navegue a la página que contiene la anotación intercambiada.
Consulte también
.NET Desktop feedback