/// <summary> /// Renders a table element. /// </summary> protected override void RenderTable(TableBlock element, IRenderContext context) { var localContext = context as UIElementCollectionRenderContext; if (localContext == null) { throw new RenderContextIncorrectException(); } var blockUIElementCollection = localContext.BlockUIElementCollection; var table = new MarkdownTable(element.ColumnDefinitions.Count, element.Rows.Count, TableBorderThickness, TableBorderBrush) { HorizontalAlignment = HorizontalAlignment.Left, Margin = TableMargin }; // Add each row. for (int rowIndex = 0; rowIndex < element.Rows.Count; rowIndex++) { var row = element.Rows[rowIndex]; // Add each cell. for (int cellIndex = 0; cellIndex < Math.Min(element.ColumnDefinitions.Count, row.Cells.Count); cellIndex++) { var cell = row.Cells[cellIndex]; // Cell content. var cellContent = CreateOrReuseRichTextBlock(new UIElementCollectionRenderContext(null, context)); cellContent.Margin = TableCellPadding; Grid.SetRow(cellContent, rowIndex); Grid.SetColumn(cellContent, cellIndex); switch (element.ColumnDefinitions[cellIndex].Alignment) { case ColumnAlignment.Center: cellContent.TextAlignment = TextAlignment.Center; break; case ColumnAlignment.Right: cellContent.TextAlignment = TextAlignment.Right; break; } if (rowIndex == 0) { cellContent.FontWeight = FontWeights.Bold; } var paragraph = new Paragraph(); var childContext = new InlineRenderContext(paragraph.Inlines, context) { Parent = paragraph, TrimLeadingWhitespace = true }; RenderInlineChildren(cell.Inlines, childContext); cellContent.Blocks.Add(paragraph); table.Children.Add(cellContent); } } blockUIElementCollection.Add(table); }