首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用windows-community-toolkit打印助手扩展的分页符

使用windows-community-toolkit打印助手扩展的分页符
EN

Stack Overflow用户
提问于 2020-07-12 01:04:21
回答 1查看 76关注 0票数 0

我正在使用windows-community-toolkitPrintHelper扩展并打印一些数据。问题是,当数据很大时,它会与页面重叠,而我找不到一种方法来动态添加新页面并将数据转移到下一页面。有什么办法吗?

代码语言:javascript
复制
public PrintHelper PrintHelper;

public void StartPrint(Panel container, List<CompanyDetail> PrintSampleItems)
{
    try
    {
        PrintHelper = new PrintHelper(container);
        PrintHelper.OnPrintSucceeded += PrintHelper_OnPrintSucceeded;
        PrintHelper.OnPrintFailed += PrintHelper_OnPrintFailed;
        PrintHelper.OnPreviewPagesCreated += PrintHelperOnOnPreviewPagesCreated;
        var pageNumber = 0;

        var data = PrintSampleItems;

        var grid = new Grid();
        grid.RowDefinitions.Add(new RowDefinition() {Height = GridLength.Auto});
        grid.RowDefinitions.Add(new RowDefinition() {Height = new GridLength(1, GridUnitType.Star)});
        grid.RowDefinitions.Add(new RowDefinition() {Height = GridLength.Auto});

        // Static header
        var header = new TextBlock
        {
            Text = "Departments Print",
            Margin = new Thickness(0, 0, 0, 20),
            HorizontalAlignment = HorizontalAlignment.Center,
            FontSize = 18,
            FontWeight = FontWeights.Bold
        };
        Grid.SetRow(header, 0);
        grid.Children.Add(header);

        var dataGrid = new CompanyDetailReportTemplateControl
        {
            HorizontalAlignment = HorizontalAlignment.Center
        };
        dataGrid.SetValues(PrintSampleItems);

        Grid.SetRow(dataGrid, 1);
        grid.Children.Add(dataGrid);


        // Footer with page number
        pageNumber++;
        var footer = new TextBlock
        {
            Text = $"Page [ {pageNumber} ]", Margin = new Thickness(0, 20, 0, 0),
            HorizontalAlignment = HorizontalAlignment.Right
        };
        Grid.SetRow(footer, 2);
        grid.Children.Add(footer);


        PrintHelper.AddFrameworkElementToPrint(grid);

    }
    catch
    {
    }
}

结果如下所示。可以看出,如果数据很大,则不会打印,因为不会自动添加下一页。我可以手动循环数据,并定义在一页上打印多少行,以及下一页打印多少行,但这不是我想要的,因为如果某些单元格数据很大,那么我的逻辑就不起作用。

EN

回答 1

Stack Overflow用户

发布于 2020-07-13 10:28:56

从该document派生。您可以在单独的页面上打印很长的DataGrid,但我们仍然需要在代码隐藏中手动分页您的数据。例如,如果我们想要以每页10个的速度削减数据源,我们需要像下面这样削减数据。

代码语言:javascript
复制
private PrintHelper _printHelper;

private async void Button_Click(object sender, RoutedEventArgs e)
{
    _printHelper = new PrintHelper(CustomPrintContainer);

    var pageNumber = 0;

    for (int i = 0; i < Items.Count; i = i + 10)
    {
        var grid = new Grid();
        grid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });
        grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Star) });
        grid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });

        // Static header
        var header = new TextBlock { Text = "Custom Print", Margin = new Thickness(0, 0, 0, 20) };
        Grid.SetRow(header, 0);
        grid.Children.Add(header);

        // Main content with layout from data template
        var dataGrid = new DataGrid();
        dataGrid.AutoGenerateColumns = true;
        dataGrid.ItemsSource = Items.Skip(i).Take(10);
        Grid.SetRow(dataGrid, 1);
        grid.Children.Add(dataGrid);

        // Footer with page number
        pageNumber++;
        var footer = new TextBlock { Text = string.Format("page {0}", pageNumber), Margin = new Thickness(0, 20, 0, 0) };
        Grid.SetRow(footer, 2);
        grid.Children.Add(footer);

        _printHelper.AddFrameworkElementToPrint(grid);
    }

    _printHelper.OnPrintCanceled += _printHelper_OnPrintCanceled;
    _printHelper.OnPrintFailed += _printHelper_OnPrintFailed;
    _printHelper.OnPrintSucceeded += _printHelper_OnPrintSucceeded;

    var printHelperOptions = new PrintHelperOptions(false);
    printHelperOptions.Orientation = Windows.Graphics.Printing.PrintOrientation.Default;
    printHelperOptions.AddDisplayOption(StandardPrintTaskOptions.Orientation);
    await _printHelper.ShowPrintUIAsync("print sample", printHelperOptions);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62852161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档