目標は、段落番号の列を 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に 2 つの列を追加します。最初の列は StackPanel で、2 番目の列はdocumentViewです。段落ごとに TextBlock を StackPanel.Children に追加し、Paragraph.ElementStart.GetCharacterRect(LogicalDirection.Forward) メソッドと返されたRectの Top & Bottom プロパティを使用して各 textBlock の高さを設定します。
すべて問題なく、段落が 500 未満の場合、番号付けはすばやく更新されますが、テキストが大きくなるにつれて遅くなります。どうすれば効率化できますか?StackPanel の代わりに Canvas を使用する必要がありますか? または、これを行うより良い方法はありますか?
ありがとう。