Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有不同首页大小的WPF flowdocument_C#_Wpf_Flowdocument - Fatal编程技术网

C# 具有不同首页大小的WPF flowdocument

C# 具有不同首页大小的WPF flowdocument,c#,wpf,flowdocument,C#,Wpf,Flowdocument,我有一个带有重复页眉/页脚的flowdocument,它是用自定义DocumentPaginator生成的。问题是我需要为第一页设置不同的页眉大小,或者换句话说,我需要为第一页设置不同的PagePadding。 带有重复页眉/页脚的DocumentPaginator被多次描述(例如or),但从未针对不同大小的页眉(非常相似,没有答案)。 我的代码片段: public class ReportPaginator : DocumentPaginator { private DocumentP

我有一个带有重复页眉/页脚的
flowdocument
,它是用自定义
DocumentPaginator
生成的。问题是我需要为第一页设置不同的页眉大小,或者换句话说,我需要为第一页设置不同的
PagePadding
。 带有重复页眉/页脚的
DocumentPaginator
被多次描述(例如or),但从未针对不同大小的页眉(非常相似,没有答案)。 我的代码片段:

public class ReportPaginator : DocumentPaginator
{
    private DocumentPaginator _flowDocumentpaginator;
    private readonly FlowDocument _flowDocument;
    public ReportPaginator(FlowDocument document)
    {
        _flowDocumentpaginator = ((IDocumentPaginatorSource)document).DocumentPaginator;
        _flowDocument = document;
    }

    public override DocumentPage GetPage(int pageNumber)
    {
        DocumentPage page = _flowDocumentpaginator.GetPage(pageNumber);
        ContainerVisual newVisual = new ContainerVisual();
        DrawingVisual header = new DrawingVisual();
        if (pageNumber == 0)
        {
            //smaller header
            [...]
        }
        else
        {
            //normal header 
            [...]
        }
        newVisual.Children.Add(header);

        if (pageNumber == 0)
        {
            //set different margins for the first page
            _flowDocument.PagePadding = new Thickness(0.7 * 96, 93.2, 0.7 * 96, 74);
            _flowDocumentpaginator = ((IDocumentPaginatorSource)_flowDocument).DocumentPaginator;
            page = _flowDocumentpaginator.GetPage(pageNumber);
        }
        else if (pageNumber == 1)
        {
            //set "normal" margins for other pages
            _flowDocument.PagePadding = new Thickness(0.7 * 96, 180, 0.7 * 96, 74);
            _flowDocumentpaginator = ((IDocumentPaginatorSource)_flowDocument).DocumentPaginator;
            page = _flowDocumentpaginator.GetPage(pageNumber);
        }

        newVisual.Children.Add(page.Visual);

        DrawingVisual footer = new DrawingVisual();
        [...]
        newVisual.Children.Add(footer);

        return new DocumentPage(newVisual, page.Size, page.BleedBox, page.ContentBox);
    }
}
此代码生成大小正确的页面(第一个页面比其他页面大),但分页已中断:第一个页面底部的几行在第二个页面顶部重复,因为更改
PagePadding
后会重新计算分页