0

コード ビハインドで定義されている特定の可視行 (例: line152) を作成して、TextView の最初の可視行にしようとしています。また、この行を強調表示したいと思います。これまでのところ、不足することなく次のソリューションを実装しました。

textEditor.ScrollTo(myLine, 0); // Setting the current line Visible (e.g. line152) in TextView
int firstLine = textEditor.TextArea.TextView.GetDocumentLineByVisualTop(textEditor.TextArea.TextView.ScrollOffset.Y).LineNumber; // This is actual top visible line of current TextView ((e.g. line130) 

textEditor.ScrollTo(firstLine - myLine, 0); //Which is not working

この行を強調表示するために、Draw() 関数を見つけましたが、それを呼び出す方法がわかりません:

 public void Draw(TextView textView, DrawingContext drawingContext)
    {
        textView.EnsureVisualLines();
        var line = textEditor.Document.GetLineByOffset(textEditor.CaretOffset);
        var segment = new TextSegment { StartOffset = line.Offset, EndOffset = line.EndOffset };

        foreach (Rect r in BackgroundGeometryBuilder.GetRectsForSegment(textView, segment))
        {
            drawingContext.DrawRoundedRectangle(
                new SolidColorBrush(Color.FromArgb(20, 0xff, 0xff, 0xff)),
                new Pen(new SolidColorBrush(Color.FromArgb(30, 0xff, 0xff, 0xff)), 1),
                new Rect(r.Location, new Size(textView.ActualWidth, r.Height)),
                3, 3
            );
        }
    }
4

1 に答える 1

5

叱るには、次を使用します。

    double visualTop = textEditor.TextArea.TextView.GetVisualTopByDocumentLine(line);
    textEditor.ScrollToVerticalOffset(visualTop);

強調表示するには、インターフェイスを実装する新しいクラスを作成しIBackgroundRendererます。次に、クラスのインスタンスをtextEditor.TextArea.TextView.BackgroundRenderersコレクションに追加します。

于 2013-11-11T11:31:27.093 に答える