C# 在多页上打印flowdocument滚动查看器

C# 在多页上打印flowdocument滚动查看器,c#,wpf,printing,flowdocument,flowdocumentscrollviewer,C#,Wpf,Printing,Flowdocument,Flowdocumentscrollviewer,我正试图打印我的FlowDocument(包装到FlowDocumentScrollViewer中),因为我有很多文本/文本框/组合框,页面高度可能会变高 我用这个: PrintDialog printDialog = new PrintDialog(); if (printDialog.ShowDialog() == true) { Scrollvvv.Document.ColumnWidth = printDialog.PrintableAreaWidth; Scrollvv

我正试图打印我的FlowDocument(包装到FlowDocumentScrollViewer中),因为我有很多文本/文本框/组合框,页面高度可能会变高

我用这个:

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>

问题是:它在一页中打印我的所有数据,宽度是可以的(我可能会添加一些边距,但这是可以的),但它压缩我的所有控件,以适应一页的高度


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

问题是您将所有内容都放在单个BlockUI容器中。DocumentPaginator无法对BlockUIContainer进行分页,即将其拆分为多个页面。如果您的UI是静态的,则可以使用多个BlockUIContainers包装您的UI。i、 e

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


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

问题是您将所有内容都放在单个BlockUI容器中。DocumentPaginator无法对BlockUIContainer进行分页,即将其拆分为多个页面。如果您的UI是静态的,则可以使用多个BlockUIContainers包装您的UI。i、 e

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


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

DocumentPaginator显示的页面大小是多少?页面计数:0,IsPageCountValid:false,页面大小={8161016}谢谢我尝试过“computePageCount”,但没有任何变化,它只显示1页而不是0。DocumentPaginator显示的页面大小是多少?页面计数:0,IsPageCountValid:false,页面大小={8161016}谢谢我尝试过“computePageCount”,但没有任何变化,它只计算1页而不是0页。谢谢,看起来好多了!但是我有几个问题:-它在两列中打印我的东西-blockUIContainer不能占用多个页面?它在右边的列上打印了一个小部分,如果这个小部分在另一页上会更好-当它打印完我的应用程序后,在我的窗口的showdialog上会出现一个“空指针异常”。我怎样才能避免呢?谢谢(列的事情已经修复,我只是一个空的异常。也许我应该把我的FlowDocumentScrollViewer复制到一个新的对象中?但是我怎么做呢?很高兴它能为你工作…你从哪里得到空的异常..你能分享一些代码吗?我删除了所有关于文档拉伸的行,它似乎能工作,如果它再次发生,我会发布异常。)n、 谢谢!谢谢你,看起来好多了!不过我有几个问题:-它在两列中打印我的东西-blockUIContainer不能占用多个页面?它在右列中打印了一个小部分,如果这个小部分在另一页上会更好-当它打印完我的应用程序后,会给我一个“空指针异常”在我的窗口的showdialog上。我怎样才能避免呢?谢谢(列的事情已经修复,我只是一个空的异常。也许我应该把我的FlowDocumentScrollViewer复制到一个新的对象中?但是我怎么做呢?很高兴它能为你工作…你从哪里得到空的异常..你能分享一些代码吗?我删除了所有关于文档拉伸的行,它似乎能工作,如果它再次发生,我会发布异常。)n、 谢谢!