Общие сведения о заметках
Обновлен: Ноябрь 2007
Запись заметок или примечаний на печатных документах является таким обыденным действием, что мы воспринимаем это как само собой разумеющееся. Эти примечания или комментарии являются «пояснениями», которые добавляются к документу для пометки информации или выделения интересующих элементов для последующего просмотра. Хотя написание заметок на печатных документах является простым и обыденным, возможность добавлять личные примечания в электронные документы обычно очень ограничена, если вообще доступна.
В этом разделе рассматривается несколько общих типов примечаний, в частности клейкие заметки и выделение текста, и описывается, как Microsoft Annotations Framework упрощает использование этих типов примечаний в элементах управления, используемых для просмотра документов в приложениях WPF (Windows Presentation Foundation). Элементы управления, используемые для просмотра документов WPF и поддерживающие примечания, включают FlowDocumentReader и FlowDocumentScrollViewer, а также элементы управления, производные от DocumentViewerBase, например DocumentViewer и FlowDocumentPageViewer.
В этом разделе содержатся следующие подразделы.
- Клейкие заметки
- Выделение текста
- Закрепление данных
- Сопоставление заметок с аннотируемыми объектами
- Связанные разделы
Клейкие заметки
Обычная клейкая заметка содержит информацию, записанную на маленьком листе цветной бумаги, который затем «приклеивается» к документу. Цифровые клейкие заметки предоставляют похожие функциональные возможности для электронных документов, но с возможностью включения многих других типов содержимого, таких как печатный текст, рукописные заметки (например, «рукописные» штрихи Планшетный ПК) или веб-ссылки.
На следующем рисунке приведены некоторые примеры выделения текста, клейких заметок и рукописных заметок.
В следующем примере показан метод, который можно использовать для включения поддержки примечаний в приложении. Полный пример см. в разделе Пример использования объекта DocumentViewer с XML-хранилищем для заметок или Пример DocumentViewer с XPS-хранилищем для заметок.
// ------------------------ 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 параметров примечания. В следующем примере показан Язык XAML (Extensible Application Markup Language), который можно использовать для объявления ContextMenu с маршрутизируемыми командами, доступными пользователям для создания примечаний и управления ими. Полный пример см. в разделе Пример DocumentViewer с XPS-хранилищем для заметок.
<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>
Закрепление данных
Annotations Framework привязывает примечания к выбранным пользователем данным, а не только к месту расположения. Таким образом, если меняется режим отображения документа, например, когда пользователь прокручивает или изменяет размер окна отображения, примечание остается с выбранными данными, к которым оно было привязано. Например, на следующем рисунке показана заметка, которую пользователь сделал на выделенном тексте. При изменении отображения документа (прокручивании, изменении размеров, масштабировании или перемещении), заметка с помощью выделения перемещается вместе с исходным фрагментом данных.
Сопоставление заметок с аннотируемыми объектами
Можно сопоставить заметки с соответствующими аннотируемыми объектами. Например, рассмотрим простое приложение для чтения документа, имеющее область примечаний. Область примечаний может иметь вид списка, в котором отображается текст связанных с документом заметок. Если пользователь выбирает элемент в списке, приложение отображает абзац документа, к которому привязан соответствующий объект заметки.
В следующем примере демонстрируется реализация обработчика событий такого списка, используемого в качестве области примечаний.
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
Пример DocumentViewer с XPS-хранилищем для заметок
Пример использования объекта DocumentViewer с XML-хранилищем для заметок
Пример стилевого оформления заметок
Основные понятия
Общие сведения о системе команд
Общие сведения о документе нефиксированного формата