Bagikan melalui


Gambaran Umum Anotasi

Menulis catatan atau komentar di dokumen kertas adalah aktivitas biasa yang hampir kami ambil begitu saja. Catatan atau komentar ini adalah "anotasi" yang kami tambahkan ke dokumen untuk menandai informasi atau untuk menyoroti item yang menarik untuk referensi nanti. Meskipun menulis catatan pada dokumen cetak mudah dan biasa, kemampuan untuk menambahkan komentar pribadi ke dokumen elektronik biasanya sangat terbatas, jika tersedia sama sekali.

Topik ini meninjau beberapa jenis anotasi umum, khususnya catatan tempel dan sorotan, dan menggambarkan bagaimana Microsoft Annotations Framework memfasilitasi jenis anotasi ini dalam aplikasi melalui kontrol tampilan dokumen Windows Presentation Foundation (WPF). Kontrol tampilan dokumen WPF yang mendukung anotasi termasuk FlowDocumentReader dan FlowDocumentScrollViewer, serta kontrol yang berasal dari DocumentViewerBase seperti DocumentViewer dan FlowDocumentPageViewer.

Catatan Tempel

Catatan tempel khas berisi informasi yang ditulis pada selembar kecil kertas berwarna yang kemudian "macet" ke dokumen. Catatan tempel digital menyediakan fungsionalitas serupa untuk dokumen elektronik, tetapi dengan fleksibilitas tambahan untuk menyertakan banyak jenis konten lain seperti teks yang diketik, catatan tulisan tangan (misalnya, goresan "tinta" PC Tablet), atau tautan Web.

Ilustrasi berikut menunjukkan beberapa contoh sorotan, catatan tempel teks, dan anotasi catatan lekat tinta.

Highlight, text and ink sticky note annotations.

Contoh berikut menunjukkan metode yang dapat Anda gunakan untuk mengaktifkan dukungan anotasi di aplikasi Anda.

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

Sorotan

Orang menggunakan metode kreatif untuk menarik perhatian item yang menarik ketika mereka menandai dokumen kertas, seperti menggarisbawahi, menyoroti, memutar kata-kata dalam kalimat, atau menggambar tanda atau notasi di margin. Sorot anotasi dalam Kerangka Kerja Anotasi Microsoft menyediakan fitur serupa untuk menandai informasi yang ditampilkan dalam kontrol tampilan dokumen WPF.

Ilustrasi berikut menunjukkan contoh anotasi sorotan.

Highlight Annotation

Pengguna biasanya membuat anotasi dengan terlebih dahulu memilih beberapa teks atau item yang menarik, lalu mengklik kanan untuk menampilkan opsi anotasi ContextMenu . Contoh berikut menunjukkan Extensible Application Markup Language (XAML) yang dapat Anda gunakan untuk mendeklarasikan ContextMenu dengan perintah yang dirutekan yang dapat diakses pengguna untuk membuat dan mengelola anotasi.

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

Penahanan Data

Kerangka Kerja Anotasi mengikat anotasi ke data yang dipilih pengguna, bukan hanya ke posisi pada tampilan tampilan. Oleh karena itu, jika tampilan dokumen berubah, seperti ketika pengguna menggulir atau mengubah ukuran jendela tampilan, anotasi tetap dengan pilihan data yang terikat. Misalnya, grafik berikut mengilustrasikan anotasi yang telah dibuat pengguna pada pilihan teks. Saat tampilan dokumen berubah (menggulir, mengubah ukuran, menskalakan, atau memindahkan), anotasi sorotan bergerak dengan pilihan data asli.

Annotation Data Anchoring

Anotasi yang Cocok dengan Objek Anotasi

Anda dapat mencocokkan anotasi dengan objek anotasi yang sesuai. Misalnya, pertimbangkan aplikasi pembaca dokumen sederhana yang memiliki panel komentar. Panel komentar mungkin merupakan kotak daftar yang menampilkan teks dari daftar anotasi yang berlabuh ke dokumen. Jika pengguna memilih item dalam kotak daftar, aplikasi akan menampilkan paragraf dalam dokumen tempat objek anotasi terkait dilabuhkan.

Contoh berikut menunjukkan cara mengimplementasikan penanganan aktivitas dari kotak daftar seperti itu yang berfungsi sebagai panel komentar.

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

Contoh skenario lain melibatkan aplikasi yang memungkinkan pertukaran anotasi dan catatan tempel antara pembaca dokumen melalui email. Fitur ini memungkinkan aplikasi ini untuk menavigasi pembaca ke halaman yang berisi anotasi yang sedang ditukar.

Baca juga