2013-01-04 56 views
11

我對WPF FlowDocumentTable上的TableCell分割策略存在問題。TableCell在分頁符後拆分:餘數分割部分丟失原始單元格屬性

下面是一個簡單的代碼,允許重現該問題:

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; 
    } 
} 

這裏是結果:

TableCell Split

正如你可以在第二頁看到,右側單元格背景顏色丟失。

有沒有人已經遇到過這個問題?任何解決方案/解決方法將受到歡迎!

編輯1:所有的性能損失,設置在該行的背景顏色/列將不解決我的問題(我有一個關於TableCell的邊框厚度主要問題)

下面是一個屏幕顯示問題有邊界:

enter image description here

編輯2:縱觀視覺樹是相當有益的。分頁過程似乎只爲第二頁上的行生成一個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我改變你的代碼演示更爲什麼的Eyal 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,並且沒有邊框(並且沒有顏色)的空單元格放置在第二頁上。我無法找到層次結構中處理單元內分頁符的任何TableDocumentPaginator對象的屬性。

Cell 1 made shorter

「由於小區2大於頁較短它不分裂,並因此‘空’單元位於第二頁(沒有屬性)」

也許它的時間爲一連接文章?

+0

SO上的相似問題: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

我認爲tablecell邊框是可見的我已經通過設置它的值爲10px來檢查它,因爲我是一個新用戶,我不能附加屏幕截圖 – Deepak

+0

在你的代碼中,它是。按照mceda答案設置第二個單元格的邊框,你會發現它會丟失。 – Sisyphe