C# 在WPF中是否可以按页码获取每个文档的内容?
我使用DocumentPaginator将FlowDocument的文本分成几页。ComputePageCount()之后是否可以按页码获取每个页面的内容?如果没有,我怎么能用其他方式来做呢 代码:C# 在WPF中是否可以按页码获取每个文档的内容?,c#,wpf,flowdocument,documentpaginator,documentpage,C#,Wpf,Flowdocument,Documentpaginator,Documentpage,我使用DocumentPaginator将FlowDocument的文本分成几页。ComputePageCount()之后是否可以按页码获取每个页面的内容?如果没有,我怎么能用其他方式来做呢 代码: 您可以使用DocumentPaginator对象的GetPage函数。它将页码作为参数 请参见是的,这是可能的 以下是一个例子: main window.xaml <Window x:Class="WpfApplication.MainWindow" xmlns="http:/
您可以使用DocumentPaginator对象的GetPage函数。它将页码作为参数 请参见是的,这是可能的 以下是一个例子: main window.xaml
<Window x:Class="WpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<TextBlock x:Name="outputTextBlock" DockPanel.Dock="Bottom"/>
<FlowDocumentPageViewer>
<FlowDocument x:Name="flowDocument" Loaded="OnFlowDocumentLoaded">
<Paragraph>First page</Paragraph>
<Paragraph BreakPageBefore="True">Second page</Paragraph>
<Paragraph BreakPageBefore="True">Third page</Paragraph>
</FlowDocument>
</FlowDocumentPageViewer>
</DockPanel>
</Window>
是的,但是我怎样才能得到这个页面的字符串文本呢?
<Window x:Class="WpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<TextBlock x:Name="outputTextBlock" DockPanel.Dock="Bottom"/>
<FlowDocumentPageViewer>
<FlowDocument x:Name="flowDocument" Loaded="OnFlowDocumentLoaded">
<Paragraph>First page</Paragraph>
<Paragraph BreakPageBefore="True">Second page</Paragraph>
<Paragraph BreakPageBefore="True">Third page</Paragraph>
</FlowDocument>
</FlowDocumentPageViewer>
</DockPanel>
</Window>
using System.Text;
using System.Windows;
using System.Windows.Documents;
namespace WpfApplication
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void OnFlowDocumentLoaded(object sender, RoutedEventArgs e)
{
var paginator = (DynamicDocumentPaginator)((IDocumentPaginatorSource)this.flowDocument).DocumentPaginator;
var text = new StringBuilder();
for (int pageNumber = 0; ; ++pageNumber)
using(var page = paginator.GetPage(pageNumber))
using (var nextPage = paginator.GetPage(pageNumber + 1))
{
if (page == DocumentPage.Missing)
break;
var startPosition = (TextPointer)paginator.GetPagePosition(page);
var endPosition = nextPage == DocumentPage.Missing ? this.flowDocument.ContentEnd : (TextPointer)paginator.GetPagePosition(nextPage);
var range = new TextRange(startPosition, endPosition);
text.AppendFormat("Page {0}:", pageNumber + 1).AppendLine();
text.AppendLine(range.Text);
}
this.outputTextBlock.Text = text.ToString();
}
}
}