Windows FormアプリからWPFのWindowを表示する

既存のFormアプリへ機能追加しようとしていますが、これがどうも仕様的にWPFで作るのが簡単そうです。FormとWPFのヘテロなアプリって作れるの?単にWPFを呼び出せば良さそうな気がします。

プロジェクトにWPFのウィンドウを追加して。。。、と思ったら、そもそもFormアプリのプロジェクトだと、WPFのウィンドウって選択肢に出てきません。

なにかやり方がありそうなモノです。ちょっとググってみたらstackoverflowに分かりやすいのがありました。

 
既存のFormアプリのソリューションへWPFカスタムコントールライブラリのプロジェクトとして追加、呼び出せば良いようです。
 
以下、備忘のため具体的な方法を書いておきます。
 
1. WPFカスタムコントールライブラリの追加
ソリューションエクスプローラーで、ソリューションを選んで、右ボタンから[追加]-[新しいプロジェクト]で「WPF カスタムコントロール ライブラリ」を追加。
NewImage
 
 
WPFのウィンドウを追加する。
NewImage
 
 
2. 参照設定の追加
Formアプリのプロジェクトへ、作成したWPFカスタムコントロールライブラリのプロジェクトを参照へ追加。
NewImage
 
参照設定へ以下のアセンブリを追加して、
PresentationCore 
PresentationFramework 
WindowsFormsIntegration 
System.Xaml
WindowsBase ←参照先のサイトには書いていないけど、これも必要
usingディレクティブも忘れずに追加
using System.Windows.Forms.Integration;
 
3. Formアプリからの呼び出し
var wpfwindow = new WpfControlLib.Window1();
ElementHost.EnableModelessKeyboardInterop(wpfwindow);
wpfwindow.Show(); 

4. 動かしてみる

無事表示された。

NewImage

コメント

このブログの人気の投稿

TabError: inconsistent use of tabs and spaces in indentation

ディスプレイ ドライバーの応答停止と回復

マクロを含んだ.XLSがExcel2010で開けない