2010-09-29 16 views
15

Estoy representando un Table en un WPF FlowDocument usando código subyacente. Pero no he podido encontrar un ejemplo que muestre cómo hacer que la tabla use solo el espacio necesario based on content. En cambio, la tabla ocupa todo el ancho disponible, lo cual no quiero, ni quiero tener que especificar un tamaño de píxel exacto.WPF Tabla Columna Tamaños

Me falta algo muy simple, ¿alguien lo ve?

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

La pregunta StackOverflow más cercano que encontré relacionado con esto era éste, http://stackoverflow.com/questions/1491285/wpf-flowdocument-table-autofit -opción, pero estoy interesado en el código detrás, no en XAML, y no estoy tan seguro de que a este tipo le hayan respondido su pregunta tampoco. –

+1

Esto parece ser un problema conocido: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a073e483-fc48-426d-9f88-e1260c9c9142 –

+0

Me había topado con eso, pero pensé que Microsoft había actuado juntos desde 2008. Pero, sí, eso parece ser una manifestación del problema que estoy enfrentando. –

Respuesta

8

no creo que esto es posible ... la única solución hacky es utilizar el BlockUIContainer y una rejilla de verdad!

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

Estoy llegando a la conclusión de que mi código original debería funcionar, pero que hay un error en WPF (y dudo que se resuelva de manera oportuna para que yo pueda usarlo) . Esta "solución hacky" fue capaz de darme una solución viable a corto plazo. Uso perspicaz de BlockUIContainer para obtener la cuadrícula en FlowDocument. Gracias, aunque una pequeña parte de mí ha muerto en el interior en que las bibliotecas deben funcionar como se documenta. –

3

tratar TableCell.ColoumnSpan y TableCell.RowSpan

+1

Esta es una forma rápida y sucia de hacer que una columna sea más grande que otras, definir varias columnas para ella y establecer su columnpan en X –

Cuestiones relacionadas