FlowDocumentPageViewer
这个控件可以说是一个阅读器,它可以把一定格式的文档加载进来,这样的好处我们可以分离开处理内容文件,只要按照一定的格式写这个文档,就能用FlowDocumentPageViewer来浏览。
在下例中,我们是通过一个按钮单击来加载内容的。
XAML代码:
<Grid x:Name="LayoutRoot">
<FlowDocumentPageViewer
Name="flowDocPageViewer"
MinZoom="50" MaxZoom="1000"
Zoom="120" ZoomIncrement="5"
Margin="0,34,8,8" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
<Button HorizontalAlignment="Left" Click="onClick" Margin="8,8,0,0" VerticalAlignment="Top" Width="100" Height="22" Content="LoadContent"/>
<Button HorizontalAlignment="Left" Click="onClick1" Margin="131,8,0,0" VerticalAlignment="Top" Width="92" Height="22" Content="SaveContent"/>
</Grid>
在加载FlowDocument时,这个文件是以流的形式读进来,然后用XamlReaderLoad加载,并转换成FlowDocument格式。其中FlowDocumetn要引入System.Windows.Documents命名空间,XamlReader要引入System.Windows.Markup 命名空间。
onClick1则是把FlowDocumentPageViewer内容导出来一个xaml文件中。
CS代码:
void LoadFlowDocumentPageViewerWithXAMLFile(string fileName)
{
FileStream xamlFile = new FileStream(fileName, FileMode.Open, FileAccess.Read);
FlowDocument content = XamlReader.Load(xamlFile) as FlowDocument;
flowDocPageViewer.Document = content;
xamlFile.Close();
}
void onClick(object sender, RoutedEventArgs e)
{
LoadFlowDocumentPageViewerWithXAMLFile(@"d:\flowDoc.xaml");
}
void onClick1 (object sender, RoutedEventArgs e)
{
FileStream xamlFile = new FileStream(@"d:\flowDoc1.xaml", FileMode.Create, FileAccess.ReadWrite);
XamlWriter.Save(flowDocPageViewer.Document, xamlFile);
xamlFile.Close();
}
在这个被加载的文件中,xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml",这两个命名空间是必需的,不写的话会报错。
内容文件(议件名为flowDoc.xaml):
<FlowDocument
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Paragraph FontSize="18">Flow Format Example</Paragraph>
<Paragraph>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy
nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi
enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure.
</Paragraph>
<Paragraph>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh
euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim
ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl
ut aliquip ex ea commodo consequat. Duis autem vel eum iriure.
</Paragraph>
<Paragraph FontSize="18">More flow elements</Paragraph>
<Paragraph FontSize="15">Inline, font type and weight, and a List</Paragraph>
<List>
<ListItem><Paragraph>ListItem 1</Paragraph></ListItem>
<ListItem><Paragraph>ListItem 2</Paragraph></ListItem>
<ListItem><Paragraph>ListItem 3</Paragraph></ListItem>
<ListItem><Paragraph>ListItem 4</Paragraph></ListItem>
<ListItem><Paragraph>ListItem 5</Paragraph></ListItem>
</List>
<Paragraph><Bold>Bolded</Bold></Paragraph>
<Paragraph><Underline>Underlined</Underline></Paragraph>
<Paragraph><Bold><Underline>Bolded and Underlined</Underline></Bold></Paragraph>
<Paragraph><Italic>Italic</Italic></Paragraph>
<Paragraph><Span>The Span element, no inherent rendering</Span></Paragraph>
<Paragraph><Run>The Run element, no inherent rendering</Run></Paragraph>
<Paragraph FontSize="15">Subscript, Superscript</Paragraph>
<Paragraph>
<Run Typography.Variants="Superscript">This text is Superscripted.</Run> This text isn't.
</Paragraph>
<Paragraph>
<Run Typography.Variants="Subscript">This text is Subscripted.</Run> This text isn't.
</Paragraph>
<Paragraph>
If a font does not support a particular form (such as Superscript) a default font form will be displayed.
</Paragraph>
<Paragraph FontSize="15">Blocks, breaks, paragraph</Paragraph>
<Section><Paragraph>A block section of text</Paragraph></Section>
<Section><Paragraph>Another block section of text</Paragraph></Section>
<Paragraph><LineBreak/></Paragraph>
<Section><Paragraph>... and another section, preceded by a LineBreak</Paragraph></Section>
<Section BreakPageBefore="True"/>
<Section><Paragraph>... and another section, preceded by a PageBreak</Paragraph></Section>
<Paragraph>Finally, a paragraph. Note the break between this paragraph ...</Paragraph>
<Paragraph TextIndent="25">... and this paragraph, and also the left indention.</Paragraph>
<Paragraph><LineBreak/></Paragraph>
</FlowDocument>
运行效果:
本文参考MSDN组织。
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524