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);
我不认为这是可能的...唯一的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));
我得出的结论是,我的原代码应该可以工作,但是WPF中存在一个错误(我怀疑这会及时解决,以便我使用它) 。这种“哈克解决方法”能够给我一个可行的短期解决方案。有见识地使用BlockUIContainer将网格放入FlowDocument中。谢谢,虽然我的一小部分已经死在图书馆应该按照记录工作。 – 2010-10-07 18:54:02
尝试TableCell.ColoumnSpan和TableCell.RowSpan
这是一种快速和肮脏的方式来获得比其他人更大的列,为其定义多个列并将其列为X – 2014-07-15 15:58:00
最近的*问题,我发现与此相关的是这样的一个,http://*.com/questions/1491285/wpf-flowdocument-table-autofit -option,但我对后面的代码感兴趣,而不是XAML,而且我不确定这个人是否也回答了他的问题。 – 2010-09-29 14:35:42
这似乎是一个已知问题:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a073e483-fc48-426d-9f88-e1260c9c9142 – 2010-10-04 21:11:49
我碰到了,但认为微软自2008年以来一直采取行动。但是,是的,这似乎是我面临的问题的一种表现。 – 2010-10-05 13:38:12