Поделиться через


Общие сведения о заметках

Запись заметок или примечаний на печатных документах является таким обыденным действием, что мы воспринимаем это как само собой разумеющееся. Эти примечания или комментарии являются «пояснениями», которые добавляются к документу для пометки информации или выделения интересующих элементов для последующего просмотра. Хотя написание заметок на печатных документах является простым и обыденным, возможность добавлять личные примечания в электронные документы обычно очень ограничена, если вообще доступна.

В этом разделе рассматриваются обычные типы заметок, особенно клейкие заметки и световые эффекты, и рассказывается, как Microsoft Annotations Framework облегчает использование этих типов заметок в приложениях при помощи элементов управления просмотра документов Windows Presentation Foundation (WPF). К элементам управления просмотра документов WPF, поддерживающим пользовательские заметки, относятся FlowDocumentReader и FlowDocumentScrollViewer, а также элементы управления, унаследованные от DocumentViewerBase, как, например, DocumentViewer и FlowDocumentPageViewer.

В этом разделе содержатся следующие подразделы.

  • Клейкие заметки
  • Выделение текста
  • Закрепление данных
  • Сопоставление заметок с аннотируемыми объектами
  • Связанные разделы

Клейкие заметки

Обычная клейкая заметка содержит информацию, записанную на маленьком листе цветной бумаги, который затем «приклеивается» к документу. Цифровые клейкие заметки предоставляют похожие функциональные возможности для электронных документов, но с возможностью включения многих других типов содержимого, таких как печатный текст, рукописные заметки (например, «рукописные» штрихи Tablet PC) или веб-ссылки.

На следующем рисунке приведены некоторые примеры выделения текста, клейких заметок и рукописных заметок.

Заметки с маркировкой, текстовые и прикрепленные заметки.

В следующем примере показан метод, который можно использовать для включения поддержки примечаний в приложении.

        ' ------------------------ 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 ' end:StartAnnotations()
// ------------------------ 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()

Выделение текста

Люди используют различные способы пометки в печатных документах для привлечения внимания к интересующим элементам, такие как подчеркивание, выделение маркером, обводка слов в предложении или рисование пометок или примечаний на полях. Пометки выделением текста в Microsoft Annotations Framework предоставляют аналогичное средство пометки информации, отображаемой в элементах управления просмотром документов в WPF.

На следующем рисунке показан пример выделения текста.

Маркировка заметок

Пользователи обычно создают примечания, сначала выбирая некоторый текст или интересующий элемент, а затем производя нажимая правую кнопку мыши для отображения ContextMenu параметров примечания. В следующем примере показан Extensible Application Markup Language (XAML), который можно использовать для объявления ContextMenu с маршрутизируемыми командами, доступными пользователям для создания заметок и управления ими.

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

Закрепление данных

Annotations Framework привязывает примечания к выбранным пользователем данным, а не только к месту расположения. Таким образом, если меняется режим отображения документа, например, когда пользователь прокручивает или изменяет размер окна отображения, примечание остается с выбранными данными, к которым оно было привязано. Например, на следующем рисунке показана заметка, которую пользователь сделал на выделенном тексте. При изменении отображения документа (прокручивании, изменении размеров, масштабировании или перемещении), заметка с помощью выделения перемещается вместе с исходным фрагментом данных.

Прикрепление данных заметок

Сопоставление заметок с аннотируемыми объектами

Можно сопоставить заметки с соответствующими аннотируемыми объектами. Например, рассмотрим простое приложение для чтения документа, имеющее область примечаний. Область примечаний может иметь вид списка, в котором отображается текст связанных с документом заметок. Если пользователь выбирает элемент в списке, приложение отображает абзац документа, к которому привязан соответствующий объект заметки.

В следующем примере демонстрируется реализация обработчика событий такого списка, используемого в качестве области примечаний.

        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
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();
    }
}

Другой скрипт касается приложений, позволяющих производить обмен по электронной почте примечаниями и клейкими заметками между читателями документа. Эта возможность позволяет этим приложениям открывать страницу, содержащую присланное примечание.

См. также

Задачи

Как добавить команду в MenuItem

Ссылки

DocumentViewerBase

DocumentViewer

FlowDocumentPageViewer

FlowDocumentScrollViewer

FlowDocumentReader

IAnchorInfo

Основные понятия

Схема примечаний

Общие сведения о ContextMenu

Общие сведения о системе команд

Общие сведения о документе нефиксированного формата