0

MEF を使用して小さな Visual Studio 拡張機能を開発しました。この拡張機能は、DSL を使用してテキスト ファイルにテキストの書式設定、インテリセンス、およびツールヒントを追加します。

MEF を使用して、DSL の「第 1 レベル」構造を保持するコンボ ボックスを右上隅に追加し、ファイル内で定義されている場所に簡単に移動できるようにする方法はありますか? クラス (左上隅) またはクラス内のメソッド/プロパティ/など (右上隅) を選択するために、デフォルトの Visual Studio C# エディターが配置されているものと非常によく似たものを考えています。

拡張機能には既に書式設定と IntelliSense が含まれているため、コンボに含めたいコンストラクトとその行番号を識別してタグ付けするために必要なコードは既に作成されています。エディターの上マージンにコンボを追加し、選択が変更されたときにカーソルを特定の行に移動させる方法について、いくつかのポインターが必要です。

4

2 に答える 2

1

(最後に確認した) MEF 拡張機能に公開されていないタイプとメンバーのドロップダウン バーに興味があります。次のいずれかを行う必要があります。

  1. IVsDropdownBarMEF 拡張機能から使用できる独自のアダプターを作成します。
  2. 標準機能をまとめて使用することを避け、IWpfTextViewMarginProvider元のマージンと同じ場所、スタイル、および機能でマージンを作成する を実装します。

2 番目の方法を使用する場合は、標準機能とは異なることに注意してください。C# または別の標準言語の Visual Studio で [ウィンドウ] → [分割] コマンドを使用すると、タイプとメンバー バーの単一セットを共有する上部ペインと下部ペインが作成されます。この同じシナリオでカスタムIWpfTextViewMarginが複製されます。

私の Visual Studio 2010 用のANTLR 言語サポート拡張機能で使用されているドロップダウンは、2 番目のアプローチを使用しています。

于 2013-01-18T00:24:16.423 に答える
0

@ 280Z28が言ったことに加えて、を実装しないようにアドバイスし、IVsDropdownBarを使用することをお勧めしますIWpfTextViewMarginProvider。マージンプロバイダールートは、エディターが直接提供するMEF拡張機能であり、エクスポートされたマージンプロバイダーに配置できるエディターTextViewRoleと属性を介してマージンの読み込みを制御できます。ContentType

カレットを特定の関数の場所に移動するために、によって提供される方法など、さまざまな方法を使用できますIWpfTextView.CaretEnsureVisible移動したキャレットを呼び出して、テキストビューがキャレットを移動した位置にスクロールすることを確認してください。

@ 280Z28が言及した分割ウィンドウの場合については、いつでものメソッドを使用して、IPropertyOwnerによって提供されるプロパティバッグにプロパティを追加してITextBuffer.Properties、バッファにマージンをすでに提供している場合を確認できます。プロパティバッグにタグを追加することで、分割されたケースをチェックし、マージンプロバイダーでnullを返し、分割されたウィンドウの場合のC#ドロップダウンバーの動作を模倣できます。のプロパティバッグを使用する場合はITextBuffer、投影シナリオに注意してください。

于 2013-01-18T05:44:23.297 に答える