2013-01-04 15 views
11

मुझे WP12 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; 
    } 
} 

और यहाँ नतीजा है दूसरे पृष्ठ पर देख सकते हैं, सही सेल पृष्ठभूमि रंग खो गया है।

क्या कोई इस मुद्दे पर पहले से ही आया है? किसी भी समाधान/कामकाज का स्वागत किया जाएगा!

संपादित करें 1: सभी गुण तो पंक्ति पर पृष्ठभूमि रंग की स्थापना खो रहे हैं/स्तंभ मेरी समस्या का समाधान नहीं होगा

यहाँ (मैं TableCell सीमा Thicknesses के बारे में मुख्य रूप से मुद्दे हैं) एक स्क्रीन मुद्दा दिखा रहा है

enter image description here

संपादित करें 2: सीमाओं के साथ दृश्य ट्री को देखते हुए काफी शिक्षाप्रद है। पेजिनेशन प्रक्रिया केवल दूसरे पृष्ठ पर पंक्ति के लिए एक पैराग्राफ विज़ुअल उत्पन्न करती है, इस प्रकार सभी दृश्य प्रभावों के नुकसान को समझाती है। कोई दृश्य है, और इस तरह कोई पृष्ठभूमि/सीमाओं/आदि ... एक समाधान DocumentPaginatorFlowDocument

enter image description here

उत्तर

2

अफसोस की बात है, मुझे कोई समाधान नहीं मिला। ऐसा लगता है कि डब्ल्यूपीएफ फ़्लो डॉक्यूमेंट के लिए एक बग है और पेजिनेशन प्रक्रिया में एंट्री पॉइंट ढूंढना आसान नहीं है।

मेरा मुख्य लक्ष्य था कि मेरे दस्तावेज़ में पृष्ठों के बीच तालिकाएं सही ढंग से विभाजित हों, इसलिए मैंने अंततः टेबल को विभाजित करने की अनुमति देने का निर्णय लिया, लेकिन सेल नहीं।

यह करने के लिए काफी आसान था, मैं सिर्फ एक BlockUIContainer इस तरह में मेरे कक्ष सामग्री रैप करने के लिए किया था:

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

यह मैं विभाजन तालिका में लापता सीमाओं होने से बचने के लिए अनुमति देता है, लेकिन कोशिकाओं अब और विभाजित नहीं कर सकते।

यह संतोषजनक नहीं है लेकिन यह सर्वोत्तम है जिसे मैं प्राप्त करने में सक्षम था।

2

से जुड़े बदलाव करने में हो सकता है मैं प्रदर्शित करने के लिए और भी अधिक क्या ईयाल अपने कोड बदल दिया है एच ने कहा है:

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 पर फिट बैठता है और दूसरे पृष्ठ पर कोई सीमा (और कोई रंग नहीं) वाला एक खाली सेल रखा जाता है। मैं पदानुक्रम में किसी भी Table या DocumentPaginator ऑब्जेक्ट की संपत्ति नहीं ढूंढ पा रहा था जो कोशिकाओं के भीतर पृष्ठ ब्रेक से निपटने में सक्षम होगा।

Cell 1 made shorter

खाली

शायद यह एक के लिए समय है "सेल (कोई गुणों के साथ) दूसरे पृष्ठ पर स्थित है" "जब से CELL2 पेज की तुलना में कम इसे विभाजित नहीं है और इसलिए एक है" लेख कनेक्ट करें?

+0

एसओ पर इसी तरह की समस्या: http://stackoverflow.com/questions/1707363/flowdocument-force-a-pagebreak-breakpagebefore – milivojeviCH

+0

कोड संपादित करने के लिए Thx। यह थोड़ा और अधिक दिखाता है कि समस्या क्या है और पंक्ति/कॉलम पर सेटिंग गुण कैसे हल नहीं कर सकते हैं। – Sisyphe

-2

मुझे लगता है कि टेबलकॉलम जोड़ना आपकी समस्या का समाधान करेगा। नीचे नमूना कोड है।

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

जैसा कि स्पष्ट रूप से प्रश्न में बताया गया है ("सभी गुण खो गए हैं इसलिए पंक्ति/कॉलम पर पृष्ठभूमि रंग स्थापित करने से मेरी समस्या हल नहीं होगी (मेरे पास मुख्य रूप से टेबलसेल सीमा मोटाई के बारे में समस्याएं हैं), और पिछले उत्तर पर हटा दिया गया था, नहीं, यह मेरी समस्या का समाधान नहीं करता है। – Sisyphe

+0

मुझे लगता है कि टेबलसेल सीमा दिखाई दे रही है। मैंने इसे 10px पर अपना मान सेट करके चेक किया है। क्योंकि मैं एक नया उपयोगकर्ता हूं, मैं स्क्रीनशॉट संलग्न नहीं कर सकता। – Deepak

+0

आपके कोड में, यह है। दूसरे सेल पर सीमा को mceda उत्तर में सेट करें, आप देखेंगे कि यह खो गया है। – Sisyphe

संबंधित मुद्दे