在多个页面上打印flowdocument滚动查看器

时间:2013-08-31 03:11:16

标签: c# wpf printing flowdocument flowdocumentscrollviewer

我正在尝试打印我的FlowDocument(它被包装到FlowDocumentScrollViewer中),因为我有很多文本/ Textbox / combobox,页面高度可能会变高!

我正在使用它:

PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == true)
{
    Scrollvvv.Document.ColumnWidth = printDialog.PrintableAreaWidth;
    Scrollvvv.Document.ColumnGap = 0;
    printDialog.PrintDocument(((IDocumentPaginatorSource)Scrollvvv.Document).DocumentPaginator, ServicesLangue.RM.GetString("TITRE_MODIFIER_SALON_EXPOSANT"));
}

我的xaml看起来像:

<FlowDocumentScrollViewer Name="Scrollvvv" VerticalScrollBarVisibility="Auto">
    <FlowDocument Name="flowDoc" PagePadding="10">
        <Section>
            <BlockUIContainer>
                <Grid Name="grid_principale">
                    <!-- Lot of stuffs here -->
                </Grid>
            </BlockUIContainer>
        </Section>
    </FlowDocument>
</FlowDocumentScrollViewer>

事情是:它在1页打印我的所有数据,宽度没问题(我可能会添加一些余量,但没关系)但它压缩我的所有控件以适应高度的一页。

如何解决这个问题?我只想禁用此自动高度并保持原始大小。

1 个答案:

答案 0 :(得分:3)

问题在于您将所有内容放在单个BlockUIContainer中。 DocumentPaginator在对BlockUIContainer进行分页时遇到问题,即将其拆分为多个页面。如果您的UI是静态的,您可以使用多个BlockUIContainer来包装您的UI。即

    <BlockUIContainer>
      <Grid Name="grid_principale">
       <!-- Grid content here -->
      </Grid>
    </BlockUIContainer>
    <BlockUIContainer>
      <Grid Name="grid_principale2">
       <!-- Grid content here -->
      </Grid>
    </BlockUIContainer>

这将生成多个页面。此外,您必须在打印前设置FlowDocument.PageHeight。