目标是将一列段落编号添加到 RichTextBox(数字显示该richtextbox.Document.Blocks 中的段落索引)。目前,我在 RichTextBox 的 LayoutUpdated 事件中使用了这段代码:
bool _added=false
void onLayoutUpdated(object sender, EventArgs e)
{
if (!_added)
{
_added= true;
scv = Helper.GetFind.FindChild<ScrollViewer>(this, null);
if (scv != null)
{
FrameworkElement documentView = scv.Content as FrameworkElement;
scv.ClearValue(ScrollViewer.ContentProperty);
Grid grid= new Grid();
...我会谈谈我在这里添加的内容...
scv.Content = grid;
UpdateLayout();
}
}
}
在grid中,我添加了两列,第一列是 StackPanel,第二列是documentView。对于每个段落,我将 TextBlock 添加到 StackPanel.Children,并使用 Paragraph.ElementStart.GetCharacterRect(LogicalDirection.Forward) 方法和返回的Rect (s) 的顶部和底部属性设置每个文本块的高度。
一切都很好,当段落少于 500 时,编号会快速更新,但是随着文本变大,它会变慢。我怎样才能使它更有效率?我应该使用 Canvas 而不是 StackPanel 吗?或者有没有更好的方法来做到这一点?
谢谢。