0

私のアプリケーションでは、さまざまなレポートを生成する必要があります。それらのほとんどは 1 ページに収まります。これらのレポートは FixedDocuments で作成しました。今、FixedDocument である種の手紙を作成しようとしています。これには、ヘッダー、補完的な締めくくり、件名などが含まれます。これらの部品は問題なく動作します。それらはすべて UserControls に分かれています。

手紙の主な内容は、頭を悩ませます。これは、カスタム リスト (categoryList) にバインドされたネストされた ItemsControl である必要があります。カスタム リストの各項目は、文字列 (category) と別のリスト (valueList) で構成されます。もう一方のリストの要素は、2 つの文字列 (キャプション、値) で構成されます。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 クラスは、定義上、WYSIWYG であり、各ページのコンテンツが明示的に定義されていることを意味します。ページに必要なコンテンツを正確に定義してから、その PageContent を FixedDocument に追加します。設計上、コンテンツはページからページへ流れません。

あなたが言うように、あなたのカテゴリは「オーバーフロー」しているので、すでに解決策に向かっています... FixedDocument の代わりに FlowDocument を使用したいと考えています。FlowDocument は、コンテンツ自体、およびフォント サイズやその他のコンテキストに基づいてコンテンツをフローします。

于 2014-11-19T19:15:32.740 に答える