ItemsControl:如何在多个页面上打印WrapPanel?

4

我想打印这个内容,但只有第一页出现。

例如,如果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"); 

}

这也是我正在寻找的东西。 - TravisWhidden
我也是。也许你现在已经找到了解决方案? - Harry
我猜你需要实现自己的DocumentPaginator。 - dipak
我认为你需要将你的集合(= 200个项目)设置为ItemsControl的ItemsSource属性。这里有一个很好的例子,展示了如何做到这一点:http://rachel53461.wordpress.com/2011/09/17/wpf-itemscontrol-example/ - Miro Malek
1个回答

3
问题在于FlowDocumentDocumentPaginator不能对BlockUIContainer进行分页,即无法将BlockUIContainer内容分割成多个页面。我在这里回答了类似的问题Print flowdocument scroll viewer on multiple pages 简而言之,您需要创建多个包含其itemsControl的BlockUIContainer。
或者按照这篇文章中解释的非正统方法,将整个控件(Visual)转换为位图,然后根据页面大小进行切割打印。http://www.codeproject.com/Articles/339416/Printing-large-WPF-UserControls 谢谢

简而言之,您将需要创建多个BlockUIContainer,每个容器都包含其自己的项控件。我猜您是指“项”而不是“项控件”?如果我们有一个动态大小的列表,那么这是否会变得无法通过XAML实现?我唯一能想象到的方法是通过代码后台动态插入BlockUIContainers。 - Kohanz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接