【问题标题】:ItemsControl: How to print WrapPanel on multiple Pages?ItemsControl:如何在多个页面上打印 WrapPanel?
【发布时间】:2013-09-02 01:16:00
【问题描述】:

我正在尝试打印此内容,但只显示第一页。 例如,如果 ItemsControlCodigos 有 200 个项目,则只显示 1 个页面。

如何轻松做到这一点?

<FlowDocumentReader Name="FlowDocumentReader1" Margin="397,85,0,0">
        <FlowDocument Name="fd">
            <BlockUIContainer>
                <ItemsControl Name="ItemsControlCodigos" >
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <WrapPanel IsItemsHost="True"  />
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock FontFamily="Tahoma" FontSize="10pt" Text="{Binding Descricao, TargetNullValue='--'}" Width="100px" />
                                <StackPanel Orientation="Horizontal" Width="100px">
                                    <TextBlock FontFamily="IDAutomationHC39M" FontSize="10pt" Text="(" />
                                    <TextBlock FontFamily="IDAutomationHC39M" FontSize="10pt" Text="{Binding id_Produto}" />
                                    <TextBlock FontFamily="IDAutomationHC39M" FontSize="10pt" Text=")" />
                                </StackPanel>
                                <Button Name="buttonExcluirItem" BorderThickness="0" BorderBrush="Transparent" Background="Transparent" 
                                    VerticalAlignment="Center"
                                    Margin="-4,-1,-1,-1"

                                    Opacity="0.3"
                                    ToolTip="Excluir este Item">
                                    <Image Width="16" Height="16"  />
                                </Button>
                            </StackPanel>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>

            </BlockUIContainer>
        </FlowDocument>
    </FlowDocumentReader>

C#

private void ButtonImprimir_Click(object sender, RoutedEventArgs e)
{

    // 20-05-2011
    PrintDialog pd = new PrintDialog();

    //pd.PrintVisual(ItemsControlCodigos, "Etiquetas");
    fd.PageHeight = pd.PrintableAreaHeight; 
    fd.PageWidth = pd.PrintableAreaWidth; 
    fd.PagePadding = new Thickness(50); 
    fd.ColumnGap = 0; 
    fd.ColumnWidth = pd.PrintableAreaWidth; 

    IDocumentPaginatorSource dps = fd;
    //dps.DocumentPaginator.PageCount;
    pd.PrintDocument(dps.DocumentPaginator, "flow doc"); 

}

【问题讨论】:

  • 这也是我正在寻找的东西。
  • 我也是。也许您在此期间找到了解决方案?
  • 我猜你需要实现自己的 DocumentPaginator。
  • 我认为您必须将您的集合(= 200 个项目)设置为 ItemsControl 的 ItemsSource 属性。 Here 是一个很好的例子:

标签: wpf xaml


【解决方案1】:

这里的问题是FlowDocumentDocumentPaginator 不会对BlockUIContainer 进行分页,即它不会破坏多个页面中的BlockUIContainer 内容。我已经在这里Print flowdocument scroll viewer on multiple pages

回答了类似的问题

简而言之,您必须创建多个 BlockUIContainer,每个都包含其 itemsControl。

或者有一种非正统的方式来打印这篇文章中解释的整个 Control(Visual) http://www.codeproject.com/Articles/339416/Printing-large-WPF-UserControls

将控件转换为位图,然后根据要打印的页面大小进行切割。

谢谢

【讨论】:

  • “简而言之,您将必须创建多个 BlockUIContainer,每个 BlockUIContainer 都包含其 itemsControl”。我想你的意思是“项目”而不是“项目控制”?如果我们有一个动态大小的列表,这是否通过 XAML 变得不可能?我能想到的唯一方法是通过代码隐藏动态插入 BlockUIContainers。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 2012-03-08
相关资源
最近更新 更多