2014-02-20 85 views
0

在我的應用程序中,我需要生成不同的報告。他們大多數適合在一個頁面上。我使用FixedDocuments創建了這些報告。 現在我嘗試在FixedDocument中創建某種字母。它包含一個標題,一個免費的關閉和一個主題。這些部件沒有任何問題。它們都分成UserControls。固定文檔中的Itemscontrol內的Pagebreak

這封信的主要內容給了我一些頭痛。這應該是綁定到自定義列表(categoryList)的嵌套ItemsControl。自定義列表中的每個項目都包含一個字符串(類別)和另一個列表(valueList)。另一個列表的元素由兩個字符串(標題,值)組成。 ItemsControl的是這樣的:

<ItemsControl ItemsSource="{Binding categoryList}" 
       DockPanel.Dock="Top" 
      Margin="20,10,0,0"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Vertical" Margin="0" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding category}"/> 
       <ItemsControl ItemsSource="{Binding valueList}"> 
        <ItemsControl.ItemsPanel> 
         <ItemsPanelTemplate> 
          <StackPanel Orientation="Vertical" Margin="0" /> 
         </ItemsPanelTemplate> 
        </ItemsControl.ItemsPanel> 
        <ItemsControl.ItemTemplate> 
         <DataTemplate> 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition /> 
            <ColumnDefinition /> 
           </Grid.ColumnDefinitions> 
           <TextBlock Text="{Binding caption}" 
                 Grid.Column="0" /> 
           <TextBlock Text="{Binding value}" 
                 Grid.Column="1" /> 
          </Grid> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

如果所屬分類和值列表都包含僅有幾個元素,一切工作正常。但是對於一定數量的元素,ItemsControl會被裁剪掉。

這是我如何通過代碼創建固定文檔:

FixedDocument doc = new FixedDocument(); 

FixedPage page = new FixedPage(); 
PageContent page1= new PageContent(); 

//All UserControls are placed inside a DockPanel 
DockPanel panel = new DockPanel(); 

//UserControl with header 
Header header = new Header(); 
DockPanel.SetDock(header, Dock.Top); 
panel.Children.Add(header); 

//UserControl with complimentary close 
Complimentary complimentary = new Complimentary(); 
DockPanel.SetDock(complimentary, Dock.Top); 
panel.Children.Add(complimentary); 

//UserControl with subject 
Subject subject = new Subject(); 
DockPanel.SetDock(subject , Dock.Top); 
panel.Children.Add(subject); 

//UserControl with ItemsControl for categoryList 
Categories categories = new Categories(); 
DockPanel.SetDock(categories,Dock.Top); 
panel.Children.Add(categories); 

//Add the DockPanel to the page 
page.Children.Add(panel); 

//Set the PageContent 
page1.Child = page; 
doc.Pages.Add(page1); 
//Set the DataContext for the Binding 
doc.DataContext = this.listWithValues; 
//Display the result in a DocumentReader 
this.reader.Document = doc; 

有沒有辦法來放置ItemsControl的內部分頁符?在導致溢出的第一個類別之前。或者在導致溢出的類別中更好。

感謝您的任何建議和意見!如果需要其他信息,請隨時詢問。

回答

1

我一直在尋找固定文檔我自己作爲一個解決方案,以啓用統計顯示覆制。

根據定義,FixedDocument類是WYSIWYG,這意味着每個頁面上的內容都被明確定義;您可以在頁面上精確定義您想要的內容,然後將PageContent添加到FixedDocument中。 按設計,內容將而不是從頁面流向頁面。

因爲,正如你所說,你的類別是「溢出」,你已經在去解決的方法......你想使用FlowDocument而不是FixedDocument。 FlowDocument將根據內容本身以及字體大小和其他上下文來流動您的內容。

+0

karfus,謝謝你的回答! 我也想過使用FlowDocument。很早以前,因爲我發佈了這個問題,但我記得那裏有些地方爲什麼我不能使用FlowDocuments。我現在正在通過代碼即時建立FixedDocument中的單個頁面。這有點多,但是我可以定義自己的規則,什麼時候做分頁。 – user2219063