0

在我的应用程序中,我需要生成不同的报告。它们中的大多数都放在一个页面上。我使用 FixedDocuments 创建了这些报告。现在我尝试在 FixedDocument 中创建某种字母。它包含标题、补充结尾和主题等内容。这些部件工作没有任何问题。它们都被分成用户控件。

信的主要内容让我有些头疼。这应该是绑定到自定义列表 (categoryList) 的嵌套 ItemsControl。自定义列表的每一项都由一个字符串(类别)和另一个列表(值列表)组成。另一个列表的元素由两个字符串(标题、值)组成。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>

如果 categoryList 和 valueList 都只包含几个元素,那么一切正常。但是对于一定数量的元素,ItemsControl 会被剪裁。

这就是我通过代码创建 FixedDocument 的方式:

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 中放置分页符?在将导致溢出的第一个类别之前。甚至在会导致溢出的类别中更好。

感谢您的任何建议和建议!如果需要任何其他信息,请随时询问。

4

1 回答 1

1

我自己一直在研究 FixedDocument 作为从统计显示复制的解决方案。

根据定义,FixedDocument 类是所见即所得的,这意味着每个页面上的内容都是明确定义的;您可以精确定义页面上需要的内容,然后将该 PageContent 添加到 FixedDocument。按照设计,内容不会在页面之间流动。

因为,正如您所说,您的类别是“溢出的”,您已经在寻找解决方案的路上......您想使用 FlowDocument 而不是 FixedDocument。FlowDocument 将根据内容本身以及字体大小和其他上下文来流动您的内容。

于 2014-11-19T19:15:32.740 回答