【发布时间】:2012-11-11 18:53:45
【问题描述】:
目标是将一列段落编号添加到 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 吗?或者有什么更好的方法吗?
谢谢。
【问题讨论】:
标签: c# wpf richtextbox