如何通过编程向WPF RichTextBox中添加表格?
解决WPF RichTextBox插入表格不显示的问题
你的代码已执行但表格不显示,核心问题是缺少TableCell元素,且默认无表格样式导致无法可视化;另外直接追加到Blocks末尾也不符合“光标位置插入”的需求,以下是修复方案:
修改后的InsertTable方法代码
private void InsertTable(object sender, RoutedEventArgs e) { rtb.BeginChange(); // 创建表格并设置可可视化的样式 var table = new Table(); table.CellSpacing = 0; table.BorderThickness = new Thickness(1); table.BorderBrush = Brushes.Black; // 添加3列并设置固定宽度 for (int i = 0; i < 3; i++) { var column = new TableColumn(); column.Width = new GridLength(100); table.Columns.Add(column); } // 创建行组并添加带单元格的行 var rowGroup = new TableRowGroup(); table.RowGroups.Add(rowGroup); for (int rowIndex = 0; rowIndex < 3; rowIndex++) { var row = new TableRow(); rowGroup.Rows.Add(row); // 为每行添加3个带内容的单元格 for (int cellIndex = 0; cellIndex < 3; cellIndex++) { var cell = new TableCell(new Paragraph(new Run($"Cell {rowIndex+1}-{cellIndex+1}"))); cell.BorderThickness = new Thickness(0,0,1,1); // 避免重复边框 cell.Padding = new Thickness(5); row.Cells.Add(cell); } } // 在光标位置插入表格 TextPointer insertionPoint = rtb.CaretPosition; if (insertionPoint.Paragraph != null) { rtb.Document.Blocks.InsertBefore(insertionPoint.Paragraph, table); } else { rtb.Document.Blocks.Add(table); } // 将光标移至表格末尾 TextPointer tableEnd = table.ContentEnd.GetPositionAtOffset(1, LogicalDirection.Forward); rtb.CaretPosition = tableEnd; rtb.EndChange(); Keyboard.Focus(rtb); }
关键修复点
- 补充TableCell:TableRow必须包含TableCell才能被渲染,这是原代码最核心的缺失项。
- 添加可视化样式:给表格和单元格设置边框、内边距、列宽,解决默认无样式导致的“看不到表格”问题。
- 光标位置插入:通过
InsertBefore将表格插入到光标所在段落位置,而非文档末尾,满足需求。 - 优化光标定位:插入后自动将光标移至表格后方,提升操作流畅度。
内容的提问来源于stack exchange,提问作者Lavaman369
相关产品推荐
相关产品推荐

