6

DocumentColorizingTransformer から派生した LineTransformerClass を TextEditor に追加しました。

TxtEditCodeViewer.TextArea.TextView.LineTransformers.Add(new ColorizeAvalonEdit());

Linetransformer で無効化を呼び出すプログラム的な方法はありますか?

テキストビューに追加されているため、次のように動作するはずです。

TxtEditCodeViewer.TextArea.TextView.InvalidateVisual();
TxtEditCodeViewer.TextArea.TextView.InvalidateArrange();
TxtEditCodeViewer.TextArea.TextView.InvalidateMeasure();

しかし、そうではありません。念のため、次のことも試しました。

//TxtEditCodeViewer.TextArea.TextView.InvalidateVisual();
//TxtEditCodeViewer.TextArea.TextView.InvalidateArrange();
//TxtEditCodeViewer.TextArea.TextView.InvalidateMeasure();
//TxtEditCodeViewer.InvalidateVisual();
//TxtEditCodeViewer.InvalidateArrange();
//TxtEditCodeViewer.InvalidateMeasure();
//TxtEditCodeViewer.TextArea.InvalidateArrange();
//TxtEditCodeViewer.TextArea.InvalidateMeasure();
//TxtEditCodeViewer.TextArea.InvalidateVisual();
4

2 に答える 2

15

テキスト ビューは、生成されたビジュアル ラインのキャッシュを維持します。WPF にコントロールの再描画を強制すると、キャッシュ内の結果が再利用されるだけで、ライン トランスフォーマーが再度呼び出されることはありません。

メソッドを使用してTextView.Redraw、キャッシュされたビジュアル ラインを無効にすることができます。

textEditor.TextArea.TextView.Redraw(segment); // invalidate portion of document
textEditor.TextArea.TextView.Redraw(); // invalidate whole document

これは と の両方ElementGeneratorsで機能しLineTransformersます。

の場合BackgroundRenderers、視線を無効にする必要はありません。代わりに、バックグラウンド レンダラーが属するレイヤーを無効にするようにテキスト ビューに指示するだけです。

textEditor.TextArea.TextView.InvalidateLayer(this.Layer);
于 2012-08-20T15:37:24.613 に答える
0

私も同じ問題を抱えていました。テキストの背景色を設定しました...

したがって、背景を設定する前に回避策を実行する必要がありました(背景はキャッシュに保存されます):

if (Txtpreview.TextArea.TextView.LineTransformers.Count > 2)
{
    Txtpreview.TextArea.TextView.LineTransformers.RemoveAt(1); // removes selection highlight
}
Txtpreview.TextArea.TextView.LineTransformers.Add(new MarkSameWord(Txtpreview.SelectedText));
于 2014-04-22T10:31:38.363 に答える