.NET TIPS

WPF/XAMLでWindowsフォームを利用するには?[3.0、3.5、VS 2008、C#、VB]

デジタルアドバンテージ 一色 政彦
2008/10/30

 Visual Studio 2008(以降、VS 2008)では、.NET Framework 3.0で追加された新プレゼンテーション技術のWPF(Windows Presentation Foundation)(のデザイナ画面)が利用できるようになっている。「TIPS:WindowsフォームでWPFコントロールを利用するには?」では、既存のWindowsフォーム上でWPFコントロールを利用するについて紹介したが、これとは逆にWPF/XAML上でWindowsフォーム・コントロールを利用することもできる。

 本稿では、これを実践する方法を紹介する。なお、VS 2008を使用してWPFアプリケーションのプロジェクトを開発していることを前提とする。

 WPFは後発のプレゼンテーション技術なので、Windowsフォームに比べると、まだコントロールが十分にそろっていない。必要とする機能を持ったWPFのコントロールがまだなく、自作する時間もないような場合、その部分だけをWindowsフォーム・コントロールで補うという使い方ができるだろう。

■WPF/XAMLでWindowsフォーム・コントロールを利用する方法

●1. Windowsフォーム用のユーザー・コントロールを作成する

 まずはWindowsフォーム用のユーザー・コントロール(以降、Winユーザー・コントロール)の作成から始めてみよう。Winユーザー・コントロールは、内部に複数のWindowsフォーム・コントロールを配置できるコンテナ・コントロールだ。

 [ソリューション エクスプローラ]でプロジェクト項目を右クリックし、表示されるコンテキスト・メニューから[追加]−[新しい項目]を実行して[新しい項目の追加]ダイアログを開き、[Windows フォーム]カテゴリの[ユーザー コントロール]テンプレートを使って新規C#/Visual Basicファイル(拡張子:.cs/.vb)を作成する。あとは、Windowsフォーム・デザイナでコントロールなどを配置する。

 次の画面は実際にWindowsフォーム・デザイナで、TextBox、Button、Labelなどのコントロールを配置したWinユーザー・コントロールを作成しているところだ。

Winユーザー・コントロールを作成しているところ(Windowsフォーム・デザイナ)

 さらにイベント・ハンドラ処理もここで実装する。

●2. WPF/XAMLにWindowsFormsHostコントロールを配置して、ウィンドウいっぱいに広げる

 次に、Windowsフォーム・コントロールを配置するために用意されているWPF/XAML用のコントロールであるWindowsFormsHostをWPF/XAML上に配置する。

 [WindowsFormsHost]コントロールは[ツールボックス]の[コントロール]タブにあるので、次の画面のようにドラッグ&ドロップすればよい。

WPF/XAMLへのWinユーザー・コントロールの配置(WPF/XAMLデザイナ)

 WindowsFormsHostコントロールを配置したら適切なサイズに調整する。WPF/XAMLのウィンドウいっぱいに広げるには、WindowsFormsHostコントロールのMarginプロパティを「0,0,0,0」に設定すればよい。

●3. WindowsFormsHostコントロールにWinユーザー・コントロールをひも付ける

 最後に、先ほど追加したWindowsFormsHostコントロールに、事前に作成しておいたWinユーザー・コントロールをひも付ける。

 これにはWPF/XAMLのWindowsのLoadedイベント・ハンドラを追加し、次のコードを記述すればよい。なおLoadedイベント・ハンドラは、WPF/XAMLデザイナでウィンドウ部分をダブル・クリックされば自動的に追加される。

private void Window_Loaded(object sender, RoutedEventArgs e)
{
  UserControl1 uc = new UserControl1();
  windowsFormsHost1.Child = uc;
}
Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
  Dim uc As New UserControl1()
  WindowsFormsHost1.Child = uc
End Sub
WindowsFormsHostコントロールにWinユーザー・コントロールを対応付けるコード(上:C#、下:VB)

 コードは説明するまでもないが、Winユーザー・コントロール(UserControl1)のインスタンスを生成して、それをWindowsFormsHostコントロール(windowsFormsHost1)のChildプロパティに指定している。

 以上でビルドすれば完了だ。次の画面は本稿で作成したサンプル・アプリケーションを実行してみたところ。

WPF/XAMLでWindowsフォームを利用するサンプル・プログラムの実行例

 なお、WPF/XAMLとWindowsフォームは別アーキテクチャであるため、実行時には多少のオーバーヘッドが発生する。Winユーザー・コントロールの規模が小さいうちは問題ないが、大きく複雑になってくると、そのロードに時間がかかるようになったりする可能性もあるので注意しておいた方がいいだろう。End of Article

利用可能バージョン:.NET Framework 3.0
利用可能バージョン:.NET Framework 3.5
カテゴリ:WPF/XAML 処理対象:WindowsFormsHostコントロール

この記事と関連性の高い別の.NET TIPS
WindowsフォームでWPFコントロールを利用するには?
WPF:子ウィンドウを透明にするには?[C#/VB]
WPFテーマで外観・デザインを簡単に変更するには?(基本編)
WPFアプリケーションでWebページを表示するには?
Xamarin.Forms:プロジェクトにXamlページを追加するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間