2

WPFWindowsFormsHostコンテナーにネストされたWinFormsUserControlを使用するVisualStudio2012 C#アプリがあります。アプリは正常に動作します。WinForms UserControlをプロジェクトに追加するには、メインフォームのXAMLファイルを直接編集する必要がありました。それは難しいことではありませんでしたが、可能であれば、代わりにツールボックスから作業できるようにしたいと思います。

Visual StudioToolboxにコントロールを表示する際の問題を処理するいくつかの異なるスレッドをStackOverflowで見つけましたが、WPFプロジェクト(混合プロジェクト)のToolboxにWinFormsコントロールを表示する方法については説明していません。WinFormsプロジェクトで使用すると、WinFormsUserControlがツールボックスに表示されることに注意してください。ただし、ホストプロジェクトがWPFプロジェクトの場合、ツールボックスにはWPFコントロールしか表示されません。次の手順でWinFormsコントロールを追加してみました。

  • ツールボックスを右クリック
  • アイテムの選択の選択
  • [.NETFrameworkコンポーネント]タブの選択
  • WinFormsUserControlを含むDLLを参照する
  • DLLを選択し、[OK]をクリックします

含まれているコントロールは.NETFrameworkコンポーネントリストにインポートされますが、[アイテムの選択]ダイアログを終了した後、ツールボックスに表示されません。奇妙なことに、DLLのコントロールをアンロードしてこの操作を数回繰り返したところ、一貫性のない結果が得られました。コントロールを表示することはできませんでしたが、「コントロールはインポートされましたが、Designerでアクティブではありませんでした」というダイアログボックスが表示され、互換性があることを確認する必要があります。また、DLLに使用可能なコントロールが含まれていないというエラーボックスが表示されました。ほとんどの場合、インポートされたコントロールが.NETFrameworkコンポーネントリストにチェックマーク付きで表示されます。リスト内のそれらの横にあり、行が青色で強調表示されています。ただし、エラーや警告メッセージは表示されませんでしたが、ツールボックスには表示されませんでした。WinFormsコントロールDLLのソースである.NETプロジェクトは、ソリューション内のプロジェクトであることに注意してください。

では、Winforms UserControlをWPFプロジェクトのツールボックスに表示させることは可能ですか?もしそうなら、どのように?

4

1 に答える 1

1

WindowsFormsHost最も簡単な解決策ではありませんが、オブジェクトを含むラッパーを作成できます。文書化することはできませんが、空域の問題のために2つの制御タイプをネイティブに組み合わせることができないと思います。

編集:WPFアプリケーションソリューションを作成してから、WPFユーザーコントロールライブラリプロジェクトをソリューションに追加しました。その後、WindowsFormsIntegration後者のプロジェクトで参照し、 WindowsFormsHostコンテナーを追加しSystem.Windows.Forms.TextBox、その子としてを設定しました。コンパイル後、ToolBoxには、新しく作成されたコントロールを含む新しい要素がありました。そこから[すべてのWPFコントロール]にドラッグするか、[アイテムの選択]ダイアログからコンパイル済みのアセンブリを選択できます。

于 2012-12-16T23:33:11.260 に答える