<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="FlowDocReader Load/Save Sample" Width="640" Height="480">
<StackPanel>
<FlowDocumentReader Name="FlowDocRdr" Grid.Row="1"/>
</StackPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Forms;
using System.IO;
using System.Windows.Markup;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
FlowDocument content = null;
OpenFileDialog openFile = new OpenFileDialog();
openFile.Filter = "FlowDocument Files (*.xaml)|*.xaml|All Files (*.*)|*.*";
if (openFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
FileStream xamlFile = openFile.OpenFile() as FileStream;
if (xamlFile == null) return;
else
{
try
{
content = XamlReader.Load(xamlFile) as FlowDocument;
if (content == null)
throw(new XamlParseException("The specified file could not be loaded as a FlowDocument."));
}
catch (XamlParseException e)
{
String error = "There was a problem parsing the specified file:
";
error += openFile.FileName;
error += "
Exception details:
";
error += e.Message;
System.Windows.MessageBox.Show(error);
return;
}
catch (Exception e)
{
String error = "There was a problem loading the specified file:
";
error += openFile.FileName;
error += "
Exception details:
";
error += e.Message;
System.Windows.MessageBox.Show(error);
return;
}
FlowDocRdr.Document = content;
}
}
}
}
}
ASP.NET & Csharp (C#)
ASP.NET & Csharp (C#) , Here you can find my posts about .NET c# .
Load a FlowDocument into a FlowDocumentReader,
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="FlowDocReader Load/Save Sample" Width="640" Height="480">
<StackPanel>
<FlowDocumentReader Name="FlowDocRdr" Grid.Row="1"/>
</StackPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Forms;
using System.IO;
using System.Windows.Markup;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
FlowDocument content = null;
OpenFileDialog openFile = new OpenFileDialog();
openFile.Filter = "FlowDocument Files (*.xaml)|*.xaml|All Files (*.*)|*.*";
if (openFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
FileStream xamlFile = openFile.OpenFile() as FileStream;
if (xamlFile == null) return;
else
{
try
{
content = XamlReader.Load(xamlFile) as FlowDocument;
if (content == null)
throw(new XamlParseException("The specified file could not be loaded as a FlowDocument."));
}
catch (XamlParseException e)
{
String error = "There was a problem parsing the specified file:
";
error += openFile.FileName;
error += "
Exception details:
";
error += e.Message;
System.Windows.MessageBox.Show(error);
return;
}
catch (Exception e)
{
String error = "There was a problem loading the specified file:
";
error += openFile.FileName;
error += "
Exception details:
";
error += e.Message;
System.Windows.MessageBox.Show(error);
return;
}
FlowDocRdr.Document = content;
}
}
}
}
}
Use XamlDesignerSerializationManager to write FlowDocument
<Window
x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
<DockPanel>
<Button DockPanel.Dock="Bottom" Content="Save..." Click="btnSave_Click"/>
<FlowDocumentReader x:Name="fdrViewer" />
</DockPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.IO;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Xml;
using Microsoft.Win32;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void btnSave_Click(object sender, RoutedEventArgs e)
{
SaveFile("c:", fdrViewer.Document);
}
private void SaveFile(string fileName,IDocumentPaginatorSource documentSource)
{
XmlTextWriter xmlWriter = null;
TextWriter writer = null;
Stream file = null;
try
{
file = File.Create(fileName);
writer = new StreamWriter(file);
xmlWriter = new XmlTextWriter(writer);
XamlDesignerSerializationManager xamlManager = new XamlDesignerSerializationManager(xmlWriter);
XamlWriter.Save(documentSource.DocumentPaginator.Source, xamlManager);
}
catch (Exception e)
{
string msg = string.Format("Error occurred during saving.{0}{0}{1}",
Environment.NewLine,
e.Message);
MessageBox.Show(msg,"Error",MessageBoxButton.OK,MessageBoxImage.Error);
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
FlowDocument flowDocument = new FlowDocument();
Paragraph paragraph = new Paragraph();
paragraph.Inlines.Add("This is a paragraph.");
flowDocument.Blocks.Add(paragraph);
flowDocument.Blocks.Add(paragraph);
fdrViewer.Document = flowDocument;
}
}
}
Programmatically Create and Save a FlowDocument
<Window
x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
<DockPanel>
<Button DockPanel.Dock="Bottom" Content="Save..." Click="btnSave_Click"/>
<FlowDocumentReader x:Name="fdrViewer" />
</DockPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.IO;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Xml;
using Microsoft.Win32;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void btnSave_Click(object sender, RoutedEventArgs e)
{
SaveFile("c:", fdrViewer.Document);
}
private void SaveFile(string fileName,IDocumentPaginatorSource documentSource)
{
XmlTextWriter xmlWriter = null;
TextWriter writer = null;
Stream file = null;
try
{
file = File.Create(fileName);
writer = new StreamWriter(file);
xmlWriter = new XmlTextWriter(writer);
XamlDesignerSerializationManager xamlManager = new XamlDesignerSerializationManager(xmlWriter);
XamlWriter.Save(documentSource.DocumentPaginator.Source, xamlManager);
}
catch (Exception e)
{
string msg = string.Format("Error occurred during saving.{0}{0}{1}",
Environment.NewLine,
e.Message);
MessageBox.Show(msg,"Error",MessageBoxButton.OK,MessageBoxImage.Error);
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
FlowDocument flowDocument = new FlowDocument();
Paragraph paragraph = new Paragraph();
paragraph.Inlines.Add("This is a paragraph.");
flowDocument.Blocks.Add(paragraph);
flowDocument.Blocks.Add(paragraph);
fdrViewer.Document = flowDocument;
}
}
}
Use FlowDocumentReader to display FlowDocument
<Window
x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
<DockPanel>
<Button DockPanel.Dock="Bottom" Content="Save..." Click="btnSave_Click"/>
<FlowDocumentReader x:Name="fdrViewer" />
</DockPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.IO;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Xml;
using Microsoft.Win32;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void btnSave_Click(object sender, RoutedEventArgs e)
{
SaveFile("c:", fdrViewer.Document);
}
private void SaveFile(string fileName,IDocumentPaginatorSource documentSource)
{
XmlTextWriter xmlWriter = null;
TextWriter writer = null;
Stream file = null;
try
{
file = File.Create(fileName);
writer = new StreamWriter(file);
xmlWriter = new XmlTextWriter(writer);
XamlDesignerSerializationManager xamlManager = new XamlDesignerSerializationManager(xmlWriter);
XamlWriter.Save(documentSource.DocumentPaginator.Source, xamlManager);
}
catch (Exception e)
{
string msg = string.Format("Error occurred during saving.{0}{0}{1}",
Environment.NewLine,
e.Message);
MessageBox.Show(msg,"Error",MessageBoxButton.OK,MessageBoxImage.Error);
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
FlowDocument flowDocument = new FlowDocument();
Paragraph paragraph = new Paragraph();
paragraph.Inlines.Add("This is a paragraph.");
flowDocument.Blocks.Add(paragraph);
flowDocument.Blocks.Add(paragraph);
fdrViewer.Document = flowDocument;
}
}
}
Programmatically change the FlowDirection of content within a FlowDocumentReader element
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfApplication1.Window1" Title="FlowDirection Sample">
<DockPanel HorizontalAlignment="Left" VerticalAlignment="Top">
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Margin="0,0,0,10">
<Button Click="LR">LeftToRight</Button>
<Button Click="RL">RightToLeft</Button>
</StackPanel>
<TextBlock Name="txt1" DockPanel.Dock="Bottom" Margin="0,50,0,0"/>
<FlowDocumentReader>
<FlowDocument FontFamily="Arial" Name="tf1" >
<Paragraph>this is a test</Paragraph>
<Paragraph>this is a test</Paragraph>
</FlowDocument>
</FlowDocumentReader>
</DockPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public void LR(object sender, RoutedEventArgs e)
{
tf1.FlowDirection = FlowDirection.LeftToRight;
txt1.Text = "FlowDirection is now " + tf1.FlowDirection.ToString();
}
public void RL(object sender, RoutedEventArgs e)
{
tf1.FlowDirection = FlowDirection.RightToLeft;
txt1.Text = "FlowDirection is now " + tf1.FlowDirection.ToString();
}
}
}
Change FlowDocument Width and Height
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="FlowDocument Optimal Paragraph Sample">
<StackPanel>
<CheckBox Click="ToggleHyphenation" Content="Automatic Hyphenation"/>
<CheckBox Click="ToggleOptimalParagraph" Content=" Enable Optimal Paragraph Layout"/>
<CheckBox Click="ToggleColumnFlex" Content="Enable Flexible Columns"/>
<Slider Name="columnWidthSlider" ValueChanged="ChangeColumnWidth"/>
<Slider Name="columnGapSlider" ValueChanged="ChangeColumnGap"/>
<FlowDocumentReader Name="flowReader">
<FlowDocument Name="flowDoc" TextAlignment="Justify"
IsOptimalParagraphEnabled="True" IsHyphenationEnabled="True"
IsColumnWidthFlexible="True" Background="AliceBlue"
ColumnWidth="300" ColumnGap="20">
<Paragraph><Italic>this is a test</Italic></Paragraph>
<Paragraph>
<Hyperlink NavigateUri="http://www-cs-faculty.stanford.edu/~knuth/">
- Donald E. Knuth
</Hyperlink>
</Paragraph>
<Paragraph><Bold>Principle of Optimal Paragraph</Bold></Paragraph>
<Paragraph>this is a test <Italic>italic</Italic> </Paragraph>
<Paragraph>this is a test</Paragraph>
<Paragraph>this is a test</Paragraph>
<Paragraph>this is a test</Paragraph>
</FlowDocument>
</FlowDocumentReader>
</StackPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Shapes;
namespace WpfApplication1
{
public partial class Window1 : Window
{
void ToggleHyphenation(Object sender, RoutedEventArgs args)
{
flowDoc.IsHyphenationEnabled = ((CheckBox)sender).IsChecked.Value;
}
void ToggleOptimalParagraph(Object sender, RoutedEventArgs args)
{
flowDoc.IsOptimalParagraphEnabled = ((CheckBox)sender).IsChecked.Value;
}
void ToggleColumnFlex(Object sender, RoutedEventArgs args)
{
flowDoc.IsColumnWidthFlexible = ((CheckBox)sender).IsChecked.Value;
}
void ChangeColumnWidth(Object sender, RoutedEventArgs args)
{
if (columnWidthSlider.Value == 0)
{
flowDoc.ColumnWidth = 100;
}
else if (columnWidthSlider.Value == 1)
{
flowDoc.ColumnWidth = 200;
}
else if (columnWidthSlider.Value == 2)
{
flowDoc.ColumnWidth = 300;
}
else if (columnWidthSlider.Value == 3)
{
flowDoc.ColumnWidth = 400;
}
else if (columnWidthSlider.Value == 4)
{
flowDoc.ColumnWidth = 500;
}
}
void ChangeColumnGap(Object sender, RoutedEventArgs args)
{
if (columnGapSlider.Value == 0)
{
flowDoc.ColumnGap = 5;
}
else if (columnGapSlider.Value == 1)
{
flowDoc.ColumnGap = 10;
}
else if (columnGapSlider.Value == 2)
{
flowDoc.ColumnGap = 15;
}
else if (columnGapSlider.Value == 3)
{
flowDoc.ColumnGap = 20;
}
else if (columnGapSlider.Value == 4)
{
flowDoc.ColumnGap = 25;
}
}
}
}