2

私の Windows フォーム アプリケーションは、フォームの 1 つで AvalonEdit (問題の複合 WPF コントロール) をホストし、テキスト編集要件に対応します。私が使用するコードは次のとおりです。

WPFHost = gcnew ElementHost();
TextField = gcnew AvalonEdit::TextEditor();
WPFHost->Dock = DockStyle::Fill;
WPFHost->Child = TextField;

TextField->Options->AllowScrollBelowDocument = false;
TextField->Options->EnableEmailHyperlinks = false;
TextField->Options->EnableHyperlinks = true;
TextField->Options->RequireControlModifierForHyperlinkClick = true;
TextField->ShowLineNumbers = true;

ContainerControl->Controls->Add(WPFHost); // the container is a panel

スクロールバーを除いて、コードは正常にコンパイルおよび実行されます - http://dl.dropbox.com/u/2584752/avalonEditBug.png。バーの左側を右クリックすると、ArgumentOutOfRange 例外が発生します。

奇妙なことに、新しく作成したサンプル プロジェクトでコントロールをホストしようとしたときに、問題を再現できませんでした。テキスト エディターの最新ビルドを使用しており、必要なアセンブリがすべてインストールされています。

編集:エディターをユーザーコントロールにラップしても役に立ちません。

4

4 に答える 4

1

新しい/空白のプロジェクトではコントロールは正常に機能しますが、必要なプロジェクトで失敗すると、何よりも競合について疑問に思うようになります。あなたが本当に望んでいるプロジェクトでは、それが機能したプロジェクトと比較して、違いは何ですか?.NETバージョン?あるディレクトリからアセンブリを参照しているが、別のディレクトリからGACから参照している?

コントロールが他の場所で機能しているときに、コントロールが混乱しているとは言い難いので、私が提案できる唯一のことは、2つのプロジェクトの違いを深く掘り下げることです。

幸運を。

于 2011-05-09T20:05:06.397 に答える
0

ElementHost の子として WPF グリッドを作成し、そのグリッド内にエディターを配置してみてください。他の方法では、そのコントロールにエディターを持ち、Winform アプリ内でコントロールを使用する UserControl を作成します。そのようなアプローチは私を数回助けました。

于 2011-05-05T17:42:14.950 に答える
0

これは私にはレイアウトエラーのように見えます。おそらく、WPFHost は TextField を予期せず測定します。

TextField 自体に特定の Width と Height を設定することをお勧めします。これで問題が解決した場合は、WPFHost コントロールのサイズが変更されたときにそれらを調整するか、MaxHeight/Width を設定してみてください。幅/高さの更新のコードを保存して保存できる場合があります。

于 2011-05-05T17:33:57.597 に答える
0

このスレッド [ Synchronizing a WPF ScrollViewer with a WinForms ScrollBar ] で説明されているように、この問題の回避策を実装しました。

于 2011-08-07T04:32:15.057 に答える