WPF表列大小

WPF表列大小

问题描述:

我使用代码隐藏在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

最近的*问题,我发现与此相关的是这样的一个,http://*.com/questions/1491285/wpf-flowdocument-table-autofit -option,但我对后面的代码感兴趣,而不是XAML,而且我不确定这个人是否也回答了他的问题。 – 2010-09-29 14:35:42

+1

这似乎是一个已知问题:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a073e483-fc48-426d-9f88-e1260c9c9142 – 2010-10-04 21:11:49

+0

我碰到了,但认为微软自2008年以来一直采取行动。但是,是的,这似乎是我面临的问题的一种表现。 – 2010-10-05 13:38:12

我不认为这是可能的...唯一的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将网格放入FlowDocument中。谢谢,虽然我的一小部分已经死在图书馆应该按照记录工作。 – 2010-10-07 18:54:02

尝试TableCell.ColoumnSpan和TableCell.RowSpan

+1

这是一种快速和肮脏的方式来获得比其他人更大的列,为其定义多个列并将其列为X – 2014-07-15 15:58:00