私のアプリケーションでは、さまざまなレポートを生成する必要があります。それらのほとんどは 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 内に改ページを配置する方法はありますか? オーバーフローを引き起こす最初のカテゴリの前。または、オーバーフローを引き起こすカテゴリ内でさらに良い.
提案やアドバイスをありがとう!他の情報が必要な場合は、お気軽にお問い合わせください。