2010-09-29 15 views
15

मैं कोड-पीछे का उपयोग कर एक WPF FlowDocument में Table प्रस्तुत कर रहा हूं। लेकिन, मैं एक ऐसा उदाहरण नहीं ढूंढ पाया जो दिखाता है कि तालिका को केवल based on content आवश्यक स्थान का उपयोग करने का तरीका दिखाता है। इसके बजाय तालिका सभी उपलब्ध चौड़ाई लेती है, जो मैं नहीं चाहता हूं, न ही मैं एक सटीक पिक्सेल आकार निर्दिष्ट करना चाहता हूं।WPF तालिका कॉलम आकार

मैं स्पष्ट रूप से कुछ सरल याद कर रहा हूं, कोई इसे देखता है?

var fd = new FlowDocument(); 

Table t = new Table(); 

t.BorderBrush = Brushes.Black; 
t.BorderThickness = new Thickness(2); 

// I thought this would do what I wanted... 
t.Columns.Add(new TableColumn() { Width = GridLength.Auto }); 
t.Columns.Add(new TableCOlumn() { Width = GridLength.Auto }); 

TableRowGroup trg = new TableRowGroup(); 

TableRow currentRow = new TableRow(); 
currentRow.Cells.Add(new TableCell(new Paragraph(new Run("ABC")))); 
currentRow.Cells.Add(new TableCell(new Paragraph(new Run("XYZ")))); 
trg.Rows.Add(currentRow); 

currentRow = new TableRow(); 
currentRow.Cells.Add(new TableCell(new Paragraph(new Run("123")))); 
currentRow.Cells.Add(new TableCell(new Paragraph(new Run("789")))); 
trg.Rows.Add(currentRow); 

t.RowGroups.Add(trg); 

fd.Blocks.Add(t); 
+0

निकटतम StackOverflow सवाल मैं संबंधित पाया इस इस एक था, http://stackoverflow.com/questions/1491285/wpf-flowdocument-table-autofit - विकल्प, लेकिन मुझे XAML नहीं, पीछे कोड में दिलचस्पी है, और मुझे यकीन नहीं है कि इस लड़के को अपना प्रश्न उत्तर दिया गया है। –

+1

यह एक ज्ञात मुद्दा प्रतीत होता है: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a073e483-fc48-426d-9f88-e1260c9c9142 –

+0

मैंने उसमें घुसपैठ की लेकिन मुझे लगा कि माइक्रोसॉफ्ट 2008 के बाद से यह एक साथ मिल गया था। लेकिन, हाँ, यह उस समस्या का एक अभिव्यक्ति प्रतीत होता है जिसका मैं सामना कर रहा हूं। –

उत्तर

8

मुझे नहीं लगता कि यह संभव है कि ... केवल hacky वैकल्पिक हल BlockUIContainer और एक वास्तविक ग्रिड का उपयोग करने के लिए है!

var fd = new FlowDocument(); 

Grid g = new Grid(); 

g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); 
g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); 

g.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto }); 
g.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto }); 

var t1 = new TextBlock() { Text = "ABC", Margin = new Thickness(5,3,5,3) }; 
t1.SetValue(Grid.ColumnProperty, 0); 
t1.SetValue(Grid.RowProperty, 0); 
g.Children.Add(t1); 

var t2 = new TextBlock() { Text = "XYZ", Margin = new Thickness(5, 3, 5, 3) }; 
t2.SetValue(Grid.ColumnProperty, 1); 
t2.SetValue(Grid.RowProperty, 0); 
g.Children.Add(t2); 

var t3 = new TextBlock() { Text = "123", Margin = new Thickness(5, 3, 5, 3) }; 
t3.SetValue(Grid.ColumnProperty, 0); 
t3.SetValue(Grid.RowProperty, 1); 
g.Children.Add(t3); 

var t4 = new TextBlock() { Text = "789", Margin = new Thickness(5, 3, 5, 3) }; 
t4.SetValue(Grid.ColumnProperty, 1); 
t4.SetValue(Grid.RowProperty, 1); 
g.Children.Add(t4); 

fd.Blocks.Add(new BlockUIContainer(g)); 
+0

मैं इस निष्कर्ष पर आ रहा हूं कि मेरा मूल कोड काम करना चाहिए, लेकिन WPF में एक बग है (और मुझे संदेह है कि इसका उपयोग करने के लिए मुझे समय-समय पर हल किया जाएगा) । यह "हैकी वर्कअराउंड" मुझे एक व्यवहार्य अल्पकालिक समाधान देने में सक्षम था। FlowDocument में ग्रिड प्राप्त करने के लिए BlockUIContainer का अंतर्दृष्टिपूर्ण उपयोग। धन्यवाद, हालांकि उस पुस्तकालयों में मेरे अंदर एक छोटा सा हिस्सा मर गया है, दस्तावेज के रूप में काम करना चाहिए। –

3

कोशिश TableCell.ColoumnSpan और TableCell.RowSpan

+1

यह कॉलम को दूसरों से बड़ा होने के लिए एक त्वरित और गंदा तरीका है, इसके लिए कई कॉलम परिभाषित करें और एक्स के कॉलमैन को सेट करें –

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