問題タブ [avalonedit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
readonly - AvalonEdit で行を読み取り専用にする (および保持する)
AvalonEdit コントロールで特定の行を読み取り専用にする堅牢な方法は何ですか? ユーザーは、C# または VB テンプレート ファイル内の特定のメソッド本体を変更できますが、それ以外は変更できません。ユーザーが行を追加または削除する場合、行ごとの読み取り専用状態をそのまま維持する必要があります。
winforms の WPFHost で AvalonEdit を使用しています。
c# - ElementHost の再描画
WinFormsアプリケーションでAvalonEditを使用しています。AvalonEditは、 ElementHostを持つコントロールに配置されます。アプリケーションにはTelerik のRadDockがあり、そのウィンドウに AvalonEdit を配置できます。多くの場合、ElementHostの再描画で問題が発生します。すべての症状を把握しているわけではありませんが、フォーカスを変更し、他のウィンドウをエディター上に移動することで、この問題を再現できます。この後、アプリケーションのすべての WPF コントロールが壊れて再描画できなくなります。ElementHostを強制的に再描画する唯一の方法リサイズ中です。たとえば、幅を変更すると、WPF コントロールが再描画されます。しかし、この「解決策」は受け入れられません。この問題は、x64 および x86 マシンで、ドッキング ウィンドウまたはフローティング ウィンドウ、アクティブなスクロールバーの有無にかかわらず、ウィンドウで再現できます。ElementHostを「修正」するには、アプリケーションを再起動する必要があります。
誰か私に提案はありますか?
c# - カスタム WPF C# プロジェクト内の AvalonEdit コントロールに大きなテキスト ファイルをロードする方法
.Net 4.0 C# WPF 基幹業務アプリを開発しており、(読み取り専用) 大きなテキスト ファイルをユーザーに表示する必要があります。TextBlock
SOに記載されているように、オプションではなく、提案されたAvalonEditコントロールを試しました。AvalonEdit.Sample スタンドアロン アプリを実行すると、8,000 行の 4MB ファイルを 1 秒未満でロードできますが、AvalonEditTextEditor
を WPF アプリに埋め込むと、前の とほぼ同じ 20 秒かかりTextBlock
ます。
UI は非常に複雑で、ツリー メニューとフォームのスプリッターがあります。フォームには、サイズ変更可能なゾーンを作成するためのスプリッターがいくつかあり、そのうちの 1 つにタブ コントロールが含まれています。タブ項目の 1 つにTextEditor
AvalonEdit からのものがあります。
XAML
CS
ファイルをロードするとき、私のラップトップ i7 4 コアの CPU 使用率は 33% です。
スタンドアロン アプリとしての AvalonEdit の動作とTextEditor
、カスタム WPF アプリ内での AvalonEdit の動作の違いについて何か提案はありますか?
で大きなファイル (10MB、10k 行) をロードする方法はTextEditor
?
アップデート:
ビジュアル ツリー:
のプロパティTextEditor
:
指摘されたとおりにホストする ScrollViewer を削除しましたTextEditor
が、同じようにパフォーマンスが低下します。
更新 2:を新しいウィンドウ
に移動しTextEditor
てレイアウトを縮小しましたが、それでもパフォーマンスが低下します。
新しい簡素化されたビジュアル ツリー:
Grid
列と行の定義は*
.
のプロパティTextEditor
:
c# - AvalonEdit での双方向バインディングが機能しない
WPF と MVVM に基づくプロジェクトで AvalonEdit を使用しました。この投稿を読んだ後、次のクラスを作成しました。
次の XAML を使用して、このコントロールを使用しました。
しかし、バインディングは機能OneWay
し、文字列プロパティを更新したり、検証ルールを実行したりしません。
期待どおりに動作するようにバインドを修正するにはどうすればよいTwoWay
ですか?
c# - ListViewのItemTemplateで使用されるAvalonEditのフックアップコマンドが機能しない
プロジェクトでAvalonEditコントロールを使用しました。Ctrl+CやCtrl+Vなどのショートカットキーを使用すると、関連するコピー/貼り付けコマンドが正常に機能します。一部のユーザーはショートカットではなく右クリックに慣れているため、使いやすさを向上させるために、これらのコマンドをコンテキストメニューで使用することにしました。制御には次のXAMLコードを使用しました。
しかし、プログラムを実行すると、これらのコマンドは常にコンテキストメニューで無効になっていることが次のように表示されます。
この問題に最初に遭遇したとき、私は別の質問を投稿しましたが、MD.Unicornの助けを借りて(以下のコメントでわかるように)、AvalonEditをListBoxまたはListViewコマンドのItemTemplateに配置すると機能しないことに気付きました。
MD.unicornの助けを借りて、結果を再現するために次のテストコードを作成しました。
ViewModelクラスとデータテンプレートの単純なクラス
およびMainWindowのXAMLコード
このテストを試してみると、DataTemplateがコンテンツコントロールで使用されている場合、コンテキストメニューでのコマンドバインディングは正常に機能しますが、ListViewItemでは無効になっていることがわかります。また、DataTemplateのコンテキストメニューはTextBoxに対して正常に機能し、ListView自体がコマンドチェーンを本質的に中断しないことを示していることにも注意してください。
コンテキストメニューを修正し、listViewアイテムの制御コマンドに接続するにはどうすればよいですか?
c# - コード内の AvalonEdit 変更構文の強調表示
コード内の AvalonEdit の構文強調表示を変更したいと考えています。
XAML:
C#:
ただし、構文の強調表示は変更されません。私は何を間違っていますか?私の問題に対するより良い解決策はありますか?
avalonedit - キャレットが行頭と最初の VisualLineElement の間に配置されないようにする (VisualColumn == 0)
ドキュメントを管理するためにAvalonEditに依存しているプロジェクトに取り組んでいます。このドキュメントの特定の行には、 AvalonEdit内から変更できない特定のインデントを使用するようにフラグが付けられています。
VisualLineElements
これらのフラグ付き行の開始時に挿入されることで、これを達成することができました。視覚要素にはDocumentLength
、インデントのサイズとサイズがあります0
。VisualLength
またGetNextCaretPosition
、キャレットを左側VisualLineElement
(後方への移動の場合) または右側 (前方への移動の場合) に「プッシュ」する方法を上書きしました。
これは、フォーマットが縮小されたバージョンの myVisualLineElement
です (要素は常に に挿入されることに注意してくださいVisualColumn == 0
) :
これは、私が抱えている1つの問題を除いてうまく機能します.キャレットを行の先頭に配置できます. ユーザーの観点からは、これは非常に紛らわしいものです。さらに悪いことに、行の先頭で「削除」を押したり、インデントの最後で「バックスペース」を押したりすると、変更を加えることなく単にキャレットが移動します。私が理解しているように、キャレットを行頭に配置できなければ、削除/バックスペースの問題は解決されます ( のコードに基づくCaretNavigationCommandHandler.OnMoveCaret
)。
これを修正する方法についての私の最善の推測は、true を返すようにプロパティをオーバーライドしてから、HandlesLineBorders
次のように変更GetNextCaretPosition
することですreturn VisualColumn + VisualLength
。前の行の最後の視覚的な列(これを行う方法がわかりません)
#2の最後の部分は可能ですか?もしそうなら、どうすればいいですか?そうでない場合、私が試すべき他のアプローチはありますか? VisualLineElements
ドキュメントの実際のコンテンツとそれがレンダリングされる方法との間の明確な分離を維持するために、私は本当に固執したいと思います.
wpf - AvalonEdit 特定の行を変更する方法
たとえば、15行目だけフォントを変更するにはどうすればよいですか? 私は使用しまし.ScrollTo(15,4);
たが、15行目にいるときに強調表示するコマンドなどはありません(コードで動的に実行したい)。では、1行だけ編集する方法はありますか? また、その行をコードで強調表示する方法を知りたいです。ここに私のxamlがあります:
c# - AvalonEdit で強調表示された単語のすべてのインスタンスを選択します
AvalonEdit で選択された (強調表示された) テキストのすべてのインスタンスを強調表示したいと考えています。VS2010 はこれを行い、便利な機能です。以下のコードに従って DocumentColorizingTransformer を実装する必要があることは理解していますが、ドキュメントから選択したテキストを取得する方法がわかりません。選択情報は「CurrentContext」では利用できません。
以下のコードは、「AvalonEdit」のすべてのインスタンスを検索します。選択した (強調表示された) テキストのすべてのインスタンスを見つけるにはどうすればよいですか。