TableCell / TableRow Margin以编程方式

时间:2017-05-18 18:44:11

标签: c# .net flowdocument

这必须是超级简单的东西,但它让我疯了。我有一个以编程方式创建的表。 Table有多行,我想控制每行之间的间距。我认为更改Paragraph Margin可以解决这个问题,但Cell仍有余量。这就是我在做的事情;

Table tb = new Table();
tb.Columns.Add(new TableColumn());
tb.RowGroups.Add(new TableRowGroup());
TableRow tr = new TableRow();
Paragraph p1 = new Paragraph(new Run("A"));
p1.Margin = new Thickness(0);
tr.Cells.Add(new TableCell(p1));
tb.RowGroups[0].Rows.Add(tr);
tr = new TableRow();
p1 = new Paragraph(new Run("A"));
p1.Margin = new Thickness(0);
tr.Cells.Add(new TableCell(p1));
tb.RowGroups[0].Rows.Add(tr);
flowDoc.Blocks.Add(tb);

我尝试创建一个TableCell对象并设置Padding = new Thickness(0);,但这没有任何效果。

注意:我很难看到额外的空间。如果你添加两个保证金为0的段落,你会看到实际上存在空格差异;

p1 = new Paragraph(new Run("B"));
p1.Margin = new Thickness(0);
flowDoc.Blocks.Add(p1);
p1 = new Paragraph(new Run("B"));
p1.Margin = new Thickness(0);
flowDoc.Blocks.Add(p1);

enter image description here

编辑:有人认为这是一个在字母数字中有不同大小的问题。所以我把两个例子都改成了字母来表示同样的事情发生了。

编辑2:回复Ed Plunkett:您的XMAL示例对我没有好处,因为这需要以编程方式创建。但是,我确实采纳了你的想法,确实让单元格或行更加清晰。我在第一段中添加了红色,而在第二段中添加了红色;

enter image description here

1 个答案:

答案 0 :(得分:1)

我打赌这是一个简单的解决方法:

Table tb = new Table() { CellSpacing = 0 };

这是我的推理。看起来Table.CellSpacing默认为2:

<Grid>
    <Grid.RenderTransform>
        <ScaleTransform ScaleX="2" ScaleY="2" />
    </Grid.RenderTransform>
    <FlowDocumentScrollViewer>
        <FlowDocument>
            <FlowDocument.Blocks>
                <Table x:Name="MyTable">
                    <Table.Columns>
                        <TableColumn />
                    </Table.Columns>
                    <Table.RowGroups>
                        <TableRowGroup>
                            <TableRow>
                                <TableCell Background="Pink">
                                    <Paragraph Background="LightBlue">
                                        <Run Background="PaleGoldenrod">0123456789Aj</Run>
                                    </Paragraph>
                                </TableCell>
                            </TableRow>
                            <TableRow>
                                <TableCell Background="Pink">
                                    <Paragraph Background="LightBlue">
                                        <Run Background="PaleGoldenrod">0123456789Aj</Run>
                                    </Paragraph>
                                </TableCell>
                            </TableRow>
                        </TableRowGroup>
                    </Table.RowGroups>
                </Table>
                <Paragraph Background="LightSkyBlue" Margin="0">
                    <Run>0123456789Aj</Run>
                </Paragraph>
                <Paragraph Background="LightSkyBlue" Margin="0">
                    <Run>0123456789Aj</Run>
                </Paragraph>
            </FlowDocument.Blocks>
        </FlowDocument>
    </FlowDocumentScrollViewer>
    <Label Content="{Binding CellSpacing, ElementName=MyTable}" />
</Grid>

enter image description here

因此,如果我在XAML中将其设置为零......

<Table x:Name="MyTable" CellSpacing="0">

enter image description here