TableCell/TableRow 以编程方式保证金
TableCell/TableRow Margin programmatically
这一定是非常简单的事情,但它让我发疯。我有一个以编程方式创建的 Table。 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);
但这没有任何效果。
注意:我很难看到额外的 space。如果添加两个边距为 0 的段落,您会发现实际上存在 space 差异;
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);
编辑: 有人认为这是数字与字母大小不同的问题。所以我将两个示例都改为字母,以表明发生了同样的事情。
编辑 2: 回复 Ed Plunkett:您的 XMAL 示例对我没有好处,因为这需要以编程方式创建。但是,我确实采纳了您的想法,并且确实更清楚地表明单元格或行正在添加 space。我在第一段中添加了红色,而不是在第二段中添加了金色;
我打赌这是一个简单的修复:
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>
因此,如果我在 XAML 中将其设置为零...
<Table x:Name="MyTable" CellSpacing="0">
这一定是非常简单的事情,但它让我发疯。我有一个以编程方式创建的 Table。 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);
但这没有任何效果。
注意:我很难看到额外的 space。如果添加两个边距为 0 的段落,您会发现实际上存在 space 差异;
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);
编辑: 有人认为这是数字与字母大小不同的问题。所以我将两个示例都改为字母,以表明发生了同样的事情。
编辑 2: 回复 Ed Plunkett:您的 XMAL 示例对我没有好处,因为这需要以编程方式创建。但是,我确实采纳了您的想法,并且确实更清楚地表明单元格或行正在添加 space。我在第一段中添加了红色,而不是在第二段中添加了金色;
我打赌这是一个简单的修复:
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>
因此,如果我在 XAML 中将其设置为零...
<Table x:Name="MyTable" CellSpacing="0">