2010-09-29 5 views
15

Я рендеринга Table в WPF FlowDocument с использованием кода. Но я не смог найти пример, который показывает, как сделать таблицу используемой только необходимой площадью 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

Я столкнулся с этим, но решил, что Microsoft с тех пор он начал действовать вместе с 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 (и я сомневаюсь, что это будет своевременно разрешено для меня, чтобы использовать его) , Этот «хакерский обходной путь» смог дать мне жизнеспособное краткосрочное решение. Проницательное использование BlockUIContainer для получения Grid в FlowDocument. Спасибо, хотя небольшая часть меня умерла внутри, потому что библиотеки должны работать как задокументированные. –

3

попробовать TableCell.ColoumnSpan и TableCell.RowSpan

+1

Это быстрый и грязный способ получить столбец больше других, определить для него несколько столбцов и установить его столбцы на X –