所以我通过使用代码动态创建FlowDocument(基于How to build a table programatically上的这篇MSDN文章)。
FlowDocument包含许多块,包括段落和表格。生成的表具有不同的大小,一些表嵌套在其他块中。如果表格不适合页面上的剩余空间,我想在下一页的开头开始该表格。
我这样做是通过在创建特定块时记录当前页面,然后当表格完成时,如果我在新页面上,我将 BreakPageBefore 属性设置为true。像这样:
foreach (var item in Data)
{
Table table = new Table();
flowDoc.Blocks.Add(table);
paginatorSource.DocumentPaginator.ComputePageCount();
pagecount = paginatorSource.DocumentPaginator.PageCount;
//do some work populating the table details...
TableColumn t = new TableColumn(); //etc...
paginatorSource.DocumentPaginator.ComputePageCount();
int newPagecount = paginatorSource.DocumentPaginator.PageCount;
if (newPagecount != pagecount)
{
//The table has spanned a new page so set the page break!
table.BreakPageBefore = true;
}
}
但这似乎不起作用。但是,如果我将表包装在 Section 中并在该部分上设置 BreakPageBefore ,则它可以正常工作。另外,如果我在表之前有一个段落,我可以在段落上设置 BreakPageBefore ,这也可以正常工作。
我尝试创建一个简单的FlowDocument,它只有一堆重复的表,并没有任何区别,我仍然需要将它们包装在一个Section中。
它们都继承自 Block 那么为什么它不会直接在 Table 上运行?