Información general sobre anotaciones

Actualización: noviembre 2007

Escribir notas o comentarios en documentos impresos es una actividad tan habitual que la damos casi por sentada. Estas notas o comentarios son "anotaciones" que se agregan a los documentos para marcar la información o resaltar elementos de interés, a fin de consultarlos más adelante. Aunque escribir notas en documentos impresos resulta fácil y es frecuente, la capacidad de agregar comentarios personales a los documentos electrónicos suele estar muy limitada, si es que está disponible en absoluto.

En este tema se revisan varios tipos comunes de anotaciones, en particular las notas rápidas y el resaltado, y se muestra cómo Microsoft Annotations Framework facilita estos tipos de anotaciones en las aplicaciones gracias a los controles de vista de documentos de Windows Presentation Foundation (WPF). Los controles de vista de documentos de WPF que admiten anotaciones incluyen FlowDocumentReader y FlowDocumentScrollViewer, así como los controles derivados de DocumentViewerBase como DocumentViewer y FlowDocumentPageViewer.

Este tema contiene las secciones siguientes.

  • Notas rápidas
  • Resaltados
  • Delimitación de datos
  • Hacer coincidir las anotaciones con los objetos anotados
  • Temas relacionados

Notas rápidas

Una nota rápida típica contiene información escrita en un papelito coloreado que se "adhiere" a un documento. Las notas rápidas digitales proporcionan una funcionalidad similar para los documentos electrónicos, pero con la flexibilidad agregada de incluir muchos otros tipos de contenido, como texto mecanografiado, notas manuscritas (por ejemplo, trazos "manuscritos" de Tablet PC) o vínculos web.

La ilustración siguiente muestra algunos ejemplos de anotaciones de resaltado, nota rápida de texto y nota rápida manuscrita.

Anotaciones de resaltar, texto y nota adhesiva manuscrita.

En el ejemplo siguiente se muestra el método que puede utilizar para habilitar la compatibilidad con las anotaciones en la aplicación. Encontrará el ejemplo completo en Ejemplo de DocumentViewer with Annotations XML-Store o Ejemplo DocumentViewer with Annotations XPS-Store.

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

Resaltados

Las personas utilizan métodos creativos para llamar la atención sobre los elementos de interés cuando marcan a un documento impreso, como subrayar, resaltar, rodear palabras de una frase o dibujar marcas o símbolos en el margen. Las anotaciones de resaltado de Microsoft Annotations Framework proporcionan características parecidas para marcar la a información mostrada en los controles de vista de documentos de WPF.

En la ilustración siguiente se muestra un ejemplo de una anotación de resaltado.

Anotación de resaltar

Para crear una anotación, el usuario suele seleccionar primero algún texto o elemento de interés y, a continuación, hacer clic con el botón secundario del mouse para mostrar un ContextMenu de opciones de anotación. En el ejemplo siguiente se muestra Lenguaje de marcado de aplicaciones extensible (XAML) que puede utilizar para declarar ContextMenu con comandos enrutados a los que el usuario puede tener acceso para crear y administrar anotaciones. Para obtener el ejemplo completo, vea Ejemplo DocumentViewer with Annotations XPS-Store.

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

Delimitación de datos

Annotations Framework enlaza las anotaciones a los datos que el usuario selecciona, no sólo a una posición en la vista de presentación. Por consiguiente, 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á enlazada. Por ejemplo, en el gráfico siguiente se muestra una anotación que el usuario ha realizado en una selección de texto. Cuando la vista del documento cambia (se desplaza, cambia de tamaño, cambia de escala o se mueve de cualquier otro modo), la anotación de resaltado se mueve a la par que la selección de datos original.

Delimitación de datos de anotación

Hacer coincidir las anotaciones con los objetos anotados

Puede hacer coincidir las anotaciones con los objetos anotados correspondientes. Por ejemplo, supongamos que tiene una aplicación de lector de documentos simple con un panel de comentarios. El panel de comentarios podría ser un cuadro de lista que muestre el texto de una lista de anotaciones delimitadas en un documento. Si el usuario selecciona un elemento en el cuadro de lista, la aplicación muestra el párrafo del documento en el que está delimitado el objeto de anotación correspondiente.

En el ejemplo siguiente se muestra cómo implementar un controlador de eventos de este tipo de cuadro de lista que actúa como un 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();
    }
}

Otro ejemplo de escenario es el de las aplicaciones que habilitan el intercambio de anotaciones y notas rápidas entre los lectores del documento a través del correo electrónico. Esta característica permite que estas aplicaciones naveguen por el lector hasta la página que contiene la anotación intercambiada.

Vea también

Tareas

Cómo: Agregar un comando a un elemento de menú

Ejemplo DocumentViewer with Annotations XPS-Store

Ejemplo de DocumentViewer with Annotations XML-Store

Ejemplo Annotations Styling

Ejemplo Document Serialization

Conceptos

Esquema en anotaciones

Información general sobre ContextMenu

Información general sobre comandos

Información general sobre documentos dinámicos

Referencia

DocumentViewerBase

DocumentViewer

FlowDocumentPageViewer

FlowDocumentScrollViewer

FlowDocumentReader

IAnchorInfo