2013-01-04 7 views
11

TableCell分割ストラテジーに関する問題がWPF FlowDocumentTableにあります。ここで改ページ後のTableCell分割:残りの分割部分が元のセルプロパティを失う

は、問題を再現できるようにする簡単なコードです:あなたのよう

TableCell Split

MainWindow.xaml.cs

/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     var table = new Table() { BorderThickness = new Thickness(1), BorderBrush = Brushes.Black, CellSpacing = 0 }; 
     var rowGroup = new TableRowGroup(); 
     var tableRow = new TableRow(); 
     var cell1 = new TableCell() { Background = Brushes.Red, BorderThickness = new Thickness(0, 0, 1, 0), BorderBrush = Brushes.Black }; 
     var cell2 = new TableCell() { Background = Brushes.Red }; 

     cell1.Blocks.Add(new Paragraph(new Run("Cell 1 ******************************************************************************"))); 
     cell2.Blocks.Add(new Paragraph(new Run("Cell 2"))); 
     tableRow.Cells.Add(cell1); 
     tableRow.Cells.Add(cell2); 
     rowGroup.Rows.Add(tableRow); 
     table.RowGroups.Add(rowGroup); 

     var flowDocument = new FlowDocument(); 
     flowDocument.Blocks.Add(table); 

     Content = flowDocument; 
    } 
} 

そして、ここでの結果であります2番目のページに表示され、右のセルの背景色が失われます。

すでにこの問題を抱えている人はいますか?どんな解決策/回避策も歓迎されるでしょう!

編集1:すべてのプロパティは、行/列の背景色は私の問題を解決することはできません設定それほど失われる(私はテーブルセル国境厚さに関する主な問題を持っている)

ここでの問題を示す画面であります

enter image description here

編集2:国境でビジュアルツリーを見てみると、かなり有益です。改ページプロセスでは、2番目のページのRowに対して1つのParagraphVisualしか生成されないため、すべての視覚効果が失われることが説明されています。そこにはビジュアルはありませんので、背景なし/国境の/ etc ... 解決策は、私はもっと何エヤルを発揮するようにコードを変更したFlowDocument

enter image description here

答えて

2

悲しいことに、私は解決策を見つけることができませんでした。これはWPF FlowDocumentに固有のバグであると思われ、ページ区切りプロセスでエントリポイントを見つけるのは容易ではありません。

私の主な目標は、文書をページ間で正しく分割することでした。最終的には、表は分割できますが、セルは分割できません。

これを行うのは非常に簡単でした、私はちょうどこのようBlockUIContainerで私のセルの内容をラップする必要がありました:

cell1.Blocks.Add(new BlockUIContainer() { Child = new TextBlock() { Text = "Cell 1 ******************************************************************************", TextWrapping = TextWrapping.Wrap}}); 

これは私が分割表に欠けている境界を持つ避けることができますが、細胞がもはや分割することはできません。

これは満足できるものではありませんが、私が達成できた最高のものです。

2

に関連するDocumentPaginatorを微調整することであってもよいですHは次のように述べています。

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     var table = new Table() { BorderThickness = new Thickness(1), BorderBrush = Brushes.Black, CellSpacing = 4 }; 
     var rowGroup = new TableRowGroup(); 
     var tableRow = new TableRow(); 
     var cell1 = new TableCell() { RowSpan = 1, Background = Brushes.Red, BorderThickness = new Thickness(3, 3, 3, 3), BorderBrush = Brushes.Green }; 
     var cell2 = new TableCell() { RowSpan = 1, Background = Brushes.Red, BorderThickness = new Thickness(2, 2, 2, 2), BorderBrush = Brushes.Blue }; 

     var correctContent = "**************************************************************************************************************************************************************************************************************************************"; 

     cell1.Blocks.Add(new Paragraph(new Run("Cell 1" + correctContent))); 
     cell2.Blocks.Add(new Paragraph(new Run("Cell 2" + correctContent.Replace("*"," ")+"."))); 
     tableRow.Cells.Add(cell1); 
     tableRow.Cells.Add(cell2); 
     rowGroup.Rows.Add(tableRow); 
     table.RowGroups.Add(rowGroup); 

     var flowDocument = new FlowDocument(); 
     flowDocument.Blocks.Add(table); 

     Content = flowDocument; 
    } 
} 

セル2には、ドットで終わる複数のスペースがあります。セル1はページ1に、境界線のない空のセル(および色なし)は2ページ目に配置されます。私は、セル内のページ区切りを処理する階層内のTableまたはDocumentPaginatorオブジェクトのプロパティを見つけることができませんでした。

Cell 1 made shorter

はたぶんそれはのための時間だ「セル(プロパティを持たない)2ページ目にあります 『』セル2は、ページより短く、それは分割しないためであることから」記事を接続しますか?

+0

同様の問題は、http://stackoverflow.com/questions/1707363/flowdocument-force-a-pagebreak-breakpagebefore – milivojeviCH

+0

コード編集用Thx。それは問題が何であるか、行/列のプロパティを設定することで解決できないことをもう少し実証します。 – Sisyphe

-2

私はあなたの問題を解決するTableColumnを追加すると思う。以下はサンプルコードです。

var table = new Table() { BorderThickness = new Thickness(1), BorderBrush = Brushes.Black, CellSpacing = 0 }; 
     var rowGroup = new TableRowGroup(); 
     var tableRow = new TableRow(); 
     var tableColumn1 = new TableColumn { Background = Brushes.Red }; 
     var tableColumn2 = new TableColumn { Background = Brushes.Red }; 
     var cell1 = new TableCell() { Background = Brushes.Red, BorderThickness = new Thickness(0, 0, 1, 0), BorderBrush = Brushes.Black }; 
     var cell2 = new TableCell() { Background = Brushes.Red }; 

     cell1.Blocks.Add(new Paragraph(new Run("Cell 1 ******************************************************************************"))); 
     cell2.Blocks.Add(new Paragraph(new Run("Cell 2"))); 
     tableRow.Cells.Add(cell1); 
     tableRow.Cells.Add(cell2); 
     rowGroup.Rows.Add(tableRow); 
     table.Columns.Add(tableColumn1); 
     table.Columns.Add(tableColumn2); 
     table.RowGroups.Add(rowGroup); 

     var flowDocument = new FlowDocument(); 
     flowDocument.Blocks.Add(table); 

     Content = flowDocument; 
+0

質問に明記されているように(「すべてのプロパティが失われているため、行/列の背景色を設定しても問題は解決しません(主にTableCell罫線の太さに関する問題があります」)、削除された前の回答に対して、 – Sisyphe

+0

私はテーブルセルの境界線が見えると思っています。私はそれを10pxの値に設定してチェックしました。私は新しいユーザーとしてスクリーンショットを添付できませんでした。 – Deepak

+0

コード内にあります。 mcedaの答えのように2番目のセルの境界を設定すると、失われていることがわかります。 – Sisyphe