2

エディターのPreviewKeyDownイベントを処理してから、KeyEventArgsのe.Handledをtrueに設定すると、入力を完全に無効にできることを知っています。

ただし、テキストが変更された後にドキュメントテキストが更新されないようにする方法を見つけようとしています。次のように、Document.Changingイベントを処理したいと思います。

textEditor.Document.Changing += Document_Changing;

ここで、textEditorは私のAvalonEditエディターです。関数で、変更されているテキストを取得したい

private void Document_Changing(object sender, DocumentChangeEventArgs e)

次に、それに基づいて計算を行います。ただし、テキストが処理される前にエディターで更新されることは望ましくありません。Document_Changingで非同期処理を行っており、終了時に別のイベントを発生させてから、更新する必要があります。視覚的な更新だけを無効にしたくはありませんが、ドキュメントを完全に更新します。

では、キーボード関連のイベントを処理するときに入力を防ぐ方法と同様に、この更新を無効にする方法はありますか?

前もって感謝します

4

1 に答える 1

6

textEditor.TextArea.TextEnteringイベントを使用して、ユーザーが入力できないようにすることができます。ただし、そのイベントは入力にのみ使用されます。他の操作(例:切り取り/貼り付け/ドラッグアンドドロップ)は現在、エディターイベントを引き起こしません(ドキュメントイベントのみですが、その時点では中止するには遅すぎます)。

別のオプションはIReadOnlySectionProvider、テキストを読み取り専用としてマークするように実装することです。これは、テキスト入力とクリップボード操作の両方で機能し、キャレットが読み取り専用セクション内にある場合は、[貼り付け]メニューコマンドを無効にすることもできます。このTextSegmentReadOnlySectionProviderクラスは、インターフェースの便利なデフォルト実装を提供します。

ドキュメント全体を読み取り専用にするには、を設定するだけですtextEditor.IsReadOnly = true;

于 2012-07-19T18:28:08.340 に答える