Annotation Service : FlowDocument « Windows Presentation Foundation « C# / CSharp Tutorial






<Window   
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:a="clr-namespace:System.Windows.Annotations;assembly=PresentationFramework"
    Title="Flow Document Reader + Annotations"
  x:Class="Window1" Initialized="OnInitialized" Closed="OnClosed">
  <StackPanel>
    <StackPanel Orientation="Horizontal">
      <Label>Control Annotations:</Label>
      <Button Command="a:AnnotationService.CreateTextStickyNoteCommand"
         CommandTarget="{Binding ElementName=reader}">Create Text Note</Button>
      <Button Command="a:AnnotationService.CreateInkStickyNoteCommand" CommandTarget="{Binding ElementName=reader}">
        Create Ink Note
      </Button>
      <Button Command="a:AnnotationService.DeleteStickyNotesCommand" CommandTarget="{Binding ElementName=reader}">
        Remove Note
      </Button>
      <Button Command="a:AnnotationService.CreateHighlightCommand"  CommandTarget="{Binding ElementName=reader}">
        Create Yellow Highlight
      </Button>
      <Button Command="a:AnnotationService.ClearHighlightsCommand" CommandTarget="{Binding ElementName=reader}">
        Remove Highlight
      </Button>
    </StackPanel>

    <FlowDocumentReader x:Name="reader">
      <FlowDocument>
        <Paragraph FontSize="22" FontWeight="Bold">Chapter 1</Paragraph>
        <Paragraph FontSize="35" FontWeight="Bold">Why WPF?</Paragraph>
        <Paragraph>
          this is a test
          this is a test
          this is a test
          this is a test
          this is a test
          this is a test
          this is a test
        </Paragraph>
        <Paragraph>
                this is a test 
                this is a test 
                this is a test 
                this is a test 
                this is a test 
                this is a test 
                this is a test 
                this is a test 
                
        </Paragraph>
        <Paragraph>
          this is another test
        </Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
        <Paragraph>...</Paragraph>
      </FlowDocument>
    </FlowDocumentReader>
  </StackPanel>
</Window>

//File:Window.xaml.cs
using System;
using System.IO;
using System.Windows;
using System.Windows.Annotations;
using System.Windows.Annotations.Storage;

public partial class Window1 : Window
{
    Stream stream;

    public Window1()
    {
        InitializeComponent();
    }

    protected void OnInitialized(object sender, EventArgs e)
    {
        AnnotationService service = AnnotationService.GetService(reader);
        if (service == null)
        {
            stream = new FileStream("storage.xml", FileMode.OpenOrCreate);
            service = new AnnotationService(reader);
            AnnotationStore store = new XmlStreamStore(stream);
            service.Enable(store);
        }
    }

    protected void OnClosed(object sender, EventArgs e)
    {
        AnnotationService service = AnnotationService.GetService(reader);
        if (service != null && service.IsEnabled)
        {
            service.Store.Flush();
            service.Disable();
            stream.Close();
        }
    }
}
WPF Annotation Service








24.156.FlowDocument
24.156.1.FlowDocument with SectionFlowDocument with Section
24.156.2.FlowDocument with UI containerFlowDocument with UI container
24.156.3.FlowDocument with TableFlowDocument with Table
24.156.4.Span and FlowDoucmentSpan and FlowDoucment
24.156.5.FlowDocument with Figure.xamlFlowDocument with Figure.xaml
24.156.6.Paragraph FontWeightParagraph FontWeight
24.156.7.FlowDocument with Hyperlink and ListFlowDocument with Hyperlink and List
24.156.8.Adding style to ParagraphAdding style to Paragraph
24.156.9.Bold text in Flow documentBold text in Flow document
24.156.10.Create Table layout in FlowDocumentCreate Table layout in FlowDocument
24.156.11.Figures in a FlowDocumentFigures in a FlowDocument
24.156.12.Styled DocumentStyled Document
24.156.13.Add ListItem to FlowDocumentAdd ListItem to FlowDocument
24.156.14.FlowDocument with TextAlignment, ColumnWidth. Italic and bold fontFlowDocument with TextAlignment, ColumnWidth. Italic and bold font
24.156.15.Flow Document ReaderFlow Document Reader
24.156.16.Add FlowDocument to ButtonAdd FlowDocument to Button
24.156.17.FlowDocument with imagesFlowDocument with images
24.156.18.Add Shape(Ellipse, Rectangle) to ListAdd Shape(Ellipse, Rectangle) to List
24.156.19.Change FlowDocument Width and HeightChange FlowDocument Width and Height
24.156.20.Programmatically change the FlowDirection of content within a FlowDocumentReader elementProgrammatically change the FlowDirection of content within a FlowDocumentReader element
24.156.21.Use FlowDocumentReader to display FlowDocumentUse FlowDocumentReader to display FlowDocument
24.156.22.Programmatically Create and Save a FlowDocumentProgrammatically Create and Save a FlowDocument
24.156.23.Use XamlDesignerSerializationManager to write FlowDocumentUse XamlDesignerSerializationManager to write FlowDocument
24.156.24.Show FlowDocumentShow FlowDocument
24.156.25.Load a FlowDocument into a FlowDocumentReader,Load a FlowDocument into a FlowDocumentReader,
24.156.26.Convert Xaml file to FlowDocument with as operatorConvert Xaml file to FlowDocument with as operator
24.156.27.Save a FlowDocument as a Extensible Application Markup Language (XAML) fileSave a FlowDocument as a Extensible Application Markup Language (XAML) file
24.156.28.Clear FlowDocumentReaderClear FlowDocumentReader
24.156.29.Programmatically add rows to a Table element.Programmatically add rows to a Table element.
24.156.30.Table Flow ContentTable Flow Content
24.156.31.Annotation ServiceAnnotation Service
24.156.32.Toggle Hyphenation, Optimal Paragraph, and Column FlexToggle Hyphenation, Optimal Paragraph, and Column Flex
24.156.33.Change font Change font
24.156.34.Document StylesDocument Styles