Megosztás a következőn keresztül:


Széljegyzetek áttekintése

A papíralapú dokumentumok jegyzeteinek vagy megjegyzéseinek írása olyan gyakori tevékenység, amelyet szinte magától értetődőnek tekintünk. Ezek a jegyzetek vagy megjegyzések "széljegyzetek", amelyeket hozzáadunk egy dokumentumhoz az információk megjelöléséhez vagy az érdekes elemek kiemeléséhez későbbi hivatkozás céljából. Bár a nyomtatott dokumentumok jegyzeteinek írása egyszerű és köznapi, a személyes megjegyzések elektronikus dokumentumokhoz való hozzáadása általában nagyon korlátozott, ha egyáltalán elérhető.

Ez a témakör áttekinti a széljegyzetek számos gyakori típusát, különösen a ragadós jegyzeteket és kiemeléseket, és bemutatja, hogy a Microsoft Annotations Framework hogyan segíti elő az alkalmazásokban az ilyen típusú széljegyzeteket a Windows Presentation Foundation (WPF) dokumentummegtekintési vezérlőivel. A széljegyzeteket támogató WPF-dokumentummegtekintési vezérlők közé tartozik a FlowDocumentReader, a FlowDocumentScrollViewer, valamint a DocumentViewerBase-re épülő vezérlők, mint például a DocumentViewer és a FlowDocumentPageViewer.

Öntapadós jegyzetek

Egy tipikus öntapadós jegyzet egy kis színes papírra írt információt tartalmaz, amely aztán "elakadt" egy dokumentumon. A digitális öntapadós jegyzetek hasonló funkciókat biztosítanak az elektronikus dokumentumokhoz, de rugalmasabbá teszik, hogy számos más tartalomtípust is tartalmazzon, például gépelt szöveget, kézzel írt jegyzeteket (például táblaszámítógép "szabadkézi tollvonásait" vagy webes hivatkozásait).

Az alábbi ábra néhány példát mutat be a kiemelésre, a szöveg ragacsos jegyzetére és a szabadkézi cetli széljegyzetekre.

Kiemelés, szöveg és tintás széljegyzetek.

Az alábbi példa azt a módszert mutatja be, amellyel engedélyezheti a széljegyzetek támogatását az alkalmazásban.

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

Legfontosabb tudnivalók

A felhasználók kreatív módszerekkel felhívják a figyelmet az érdekes elemekre, amikor papíralapú dokumentumokat jelölnek ki, például aláhúzással, kiemeléssel, szavak körülölelésével egy mondatban, illetve rajzjelekkel vagy jelölésekkel a margón. A Microsoft Annotations Framework kiemelt széljegyzetei hasonló funkciót biztosítanak a WPF-dokumentummegtekintési vezérlőkben megjelenő információk megjelöléséhez.

Az alábbi ábrán egy kiemelési széljegyzet látható.

Széljegyzet kiemelése

A felhasználók általában úgy hoznak létre széljegyzeteket, hogy először kijelölnek egy szöveget vagy egy érdekes elemet, majd a jobb gombbal kattintva megjelenítik a széljegyzetbeállítások ContextMenu. Az alábbi példában az XAML (Extensible Application Markup Language) látható, amellyel deklarálhat egy ContextMenu-t irányított parancsokkal, amelyekhez a felhasználók hozzáférhetnek, hogy széljegyzeteket hozzanak létre és kezeljenek.

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

Adathorgonyzás

A Széljegyzetek keretrendszer a felhasználó által kiválasztott adatokhoz köti a széljegyzeteket, nem csak a megjelenítési nézet egy pozíciójához. Ezért ha a dokumentumnézet megváltozik, például amikor a felhasználó görgeti vagy átméretezi a megjelenítési ablakot, a széljegyzet megmarad az adatkijelöléssel, amelyhez kötött. Az alábbi ábrán például egy jegyzet látható, amelyet a felhasználó egy szövegkijelölésen készített. Amikor a dokumentumnézet megváltozik (görget, átméretez, skáláz vagy más módon mozog), a kiemelési széljegyzet az eredeti adatkijelöléssel együtt mozog.

széljegyzetadatok rögzítése

Egyező megjegyzések az annotált objektumokkal

A jelölések a megfelelően megjelölt objektumokkal egyeztethetők. Vegyük például egy egyszerű dokumentumolvasó alkalmazást, amely megjegyzéspanelt is kapott. A megjegyzések panel lehet egy listamező, amely a dokumentumhoz rögzített széljegyzetek listájából jeleníti meg a szöveget. Ha a felhasználó kiválaszt egy elemet a listamezőben, akkor az alkalmazás megtekinti a dokumentum azon bekezdését, amelyhez a megfelelő széljegyzetobjektum rögzítve van.

Az alábbi példa bemutatja, hogyan implementálható egy olyan lista eseménykezelője, amely a megjegyzések panelként szolgál.

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

Egy másik példaforgatókönyv olyan alkalmazásokat tartalmaz, amelyek lehetővé teszik a jegyzetek és a cetlik cseréjét a dokumentumolvasók között e-mailben. Ez a funkció lehetővé teszi ezeknek az alkalmazásoknak, hogy az olvasót arra a lapra navigálják, amely tartalmazza a kicserélt széljegyzetet.

Lásd még