2010-09-29 14 views
15

Bir WPF FlowDocument kod arkasında bulunan bir Table yapıyorum. Ancak, tabloyu yalnızca based on content gereken alana nasıl kullanacağınızı gösteren bir örnek bulamadım. Bunun yerine, tablo, istemediğim tüm genişlikleri alır ve tam bir piksel boyutu belirtmek zorunda kalmam.WPF Tablo Sütun Boyutları

Açıkça basit bir şey eksik, herkes görüyor mu?

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

bu biriydi I ilgili bulunan en yakın StackOverflow soru http://stackoverflow.com/questions/1491285/wpf-flowdocument-table-autofit -option, ama arkadaki kodla ilgileniyorum, XAML değil, ve bu adamın da onun cevabını aldığından emin değilim. –

+1

Bu bilinen bir sorun gibi görünüyor: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a073e483-fc48-426d-9f88-e1260c9c9142 –

+0

Buna çarptım ama Microsoft'u düşündüm 2008'den beri birlikte harekete geçmişti. Ama, evet, karşılaştığım sorunun bir tezahürü gibi görünüyor. –

cevap

8

bu mümkün olduğunu düşünmüyorum ... sadece hacky geçici çözüm BlockUIContainer ve gerçek bir ızgara kullanmaktır!

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

Orijinal kodumun çalışması gerektiği sonucuna varıyorum, ancak WPF'de bir hata var (ve bunun benim için zamanında çözüleceğinden şüphe duyuyorum) . Bu "hacky çözümü" bana uygun bir kısa vadeli çözüm sunabiliyordu. FlowDocument içine Izgara almak için BlockUIContainer anlayışlı kullanımı. Teşekkürler, küçük bir kısmım içeride öldü bu kütüphanelerde belgelenmiş olarak çalışmalı. –

3

deneyin TableCell.ColoumnSpan ve TableCell.RowSpan

+1

Bu, bir sütunun diğerlerinden daha büyük olması, bunun için birden çok sütun tanımlaması ve sütun sütununu X olarak ayarlamasının hızlı ve kirli bir yoludur. –