2011-05-21 80 views
4

我正在尝试打印,但只有第一页出现。例如,如果ItemsControlCodigos有200个项目,则只会出现1个页面。ItemsControl:如何在多个页面上打印WrapPanel?

这怎么能轻松完成?

<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"); 

} 
+0

这也是我正在寻找的东西。 – TravisWhidden 2011-12-13 21:59:50

+0

我也是。也许你在此期间找到了解决方案? – Harry 2013-04-23 05:55:40

+0

我想你需要实现自己的DocumentPaginator。 – codeSetter 2013-05-20 13:17:55

回答

2

的这里的问题是,FlowDocumentDocumentPaginator不分页的BlockUIContainer即它不会破坏在多个页面的内容BlockUIContainer。我已经在这里回答了类似的问题Print flowdocument scroll viewer on multiple pages

总之,您将不得不创建多个BlockUIContainer,每个BlockUIContainer都包含它的itemsControl。

或者存在打印整个控制(视觉)的非正统的方式本文http://www.codeproject.com/Articles/339416/Printing-large-WPF-UserControls

,其中控制被转换为位图,然后将其根据页面大小打印切碎中说明。

谢谢

+0

“简而言之,你将不得不创建多个BlockUIContainer,每个BlockUIContainer都包含它的ItemsControl的”。我认为你的意思是“物品”而不是“itemscontrol”?如果我们有一个动态大小的列表,这是否通过XAML变得不可能?我可以设想这样做的唯一方法是通过代码隐藏动态插入BlockUIContainers。 – Kohanz 2016-09-17 19:31:08