WPF と Windows フォームの相互運用性
WPF と Windows Formsは、アプリケーション インターフェイスを作成するための 2 つの異なるアーキテクチャを提供します。 System.Windows.Forms.Integration 名前空間は、共通の相互運用シナリオを可能にするクラスを提供します。 相互運用機能を実装する 2 つの主要クラスは、WindowsFormsHost と ElementHost です。 ここでは、サポートされる相互運用シナリオと、サポートされないシナリオについて説明します。
メモ |
---|
ハイブリッド コントロール シナリオには特に注意する必要があります。ハイブリッド コントロールは、あるテクノロジのコントロールの入れ子になっている別のテクノロジのコントロールです。これは、入れ子になった相互運用とも呼ばれます。複数レベルのハイブリッド コントロールには、複数のレベルで入れ子になっているハイブリッド コントロールが含まれます。複数レベルの入れ子になった相互運用の例として、ある Windows Forms コントロールに WPF コントロールが含まれ、さらにそのコントロールに Windows Forms コントロールが含まれている場合があります。複数レベルのハイブリッド コントロールはサポートされていません。 |
このトピックは、次のセクションで構成されています。
- WPF での Windows フォーム コントロールのホスト
- Windows フォームでの WPF コントロールのホスト
- 関連トピック
WPF での Windows フォーム コントロールのホスト
次の相互運用のシナリオは、WPF コントロールが Windows Forms コントロールをホストする場合にサポートされます。
WPF コントロールは、XAML を使用して 1 つ以上の Windows Forms コントロールをホストできます。
コードを使用して 1 つ以上の Windows Forms コントロールをホストできます。
他の Windows Forms コントロールを含む Windows Forms コンテナー コントロールをホストできます。
WPF マスターおよび Windows Forms 詳細を使用して、マスター/詳細フォームをホストできます。
Windows Forms マスターおよび WPF 詳細を使用して、マスター/詳細フォームをホストできます。
1 つ以上の ActiveX コントロールをホストできます。
1 つ以上の複合コントロールをホストできます。
Extensible Application Markup Language (XAML) を使用してハイブリッド コントロールをホストできます。
コードを使用してハイブリッド コントロールをホストできます。
レイアウトのサポート
WindowsFormsHost 要素がホストされている Windows Forms コントロールを WPF のレイアウト システムに統合する際の既知の制限を次のリストに示します。
Windows Forms コントロールは、サイズを変更できなかったり、特定のサイズにしか設定できない場合があります。 たとえば、Windows Forms ComboBox コントロールは、コントロールのフォント サイズで定義されている 1 つの高さしかサポートしていません。 要素を垂直方向に伸縮できると想定される、WPF の動的レイアウトでは、ホストされている ComboBox コントロールは同様には伸縮できません。
Windows Forms コントロールは回転または斜めにすることはできません。 たとえば、ユーザー インターフェイスを 90°回転した場合、ホストされている Windows Forms コントロールの垂直の位置は維持されます。
ほとんどの場合、Windows Forms コントロールは、比率を保持したまま拡大縮小することはできません。 コントロール全体のサイズは拡大縮小されますが、コントロールの子コントロールやコンポーネント要素のサイズは希望どおりに変更できません。 この制限は、Windows Forms の各コントロールで拡大縮小をどの程度サポートしているかに依存します。
WPF ユーザー インターフェイスでは、要素の z オーダーを変更して重複を制御できます。 ホストされている Windows Forms コントロールは別の HWND で描画されるため、常に WPF 要素の一番上に描画されます。
Windows Forms コントロールは、フォント サイズに基づく自動スケーリングをサポートします。 WPF ユーザー インターフェイスでは、フォント サイズを変更しても、レイアウト全体のサイズは変わりません。ただし、個々の要素は動的にサイズを変更できます。
アンビエント プロパティ
WPF コントロールの一部のアンビエント プロパティは、Windows Forms と同等の機能があります。 これらのアンビエント プロパティは、ホストされている Windows Forms コントロールに適用され、WindowsFormsHost コントロールのパブリック プロパティとして公開されます。 WindowsFormsHost コントロールは、各 WPF アンビエント プロパティをその Windows Formsの等価プロパティに変換します。
詳細については、「Windows フォームと WPF プロパティの割り当て」を参照してください。
動作
相互運用動作の説明を次の表に示します。
動作 |
サポート状況 |
サポートなし |
---|---|---|
透過性 |
Windows Forms コントロールのレンダリングは透過性をサポートします。 WPF の親コントロールの背景を、ホストしている Windows Forms コントロールの背景にすることができます。 |
一部の Windows Forms コントロールは、透過性をサポートしません。 たとえば、TextBox コントロールと ComboBox コントロールは、WPF でホストされている場合、透明になりません。 |
Tab キーによる移動 |
ホストされている Windows Forms コントロールのタブ オーダーは、それらのコントロールが Windows Forms ベースのアプリケーションでホストされている場合と同じです。 Tab キーおよび Shift + Tab キーを使用した WPF コントロールから Windows Forms コントロールへの Tab キーによる移動は、通常どおり動作します。 TabStop プロパティの値が false になっている Windows Forms コントロールは、ユーザーがコントロール間を Tab キーで移動しても、フォーカスを受け取りません。
|
適用なし。 |
方向キーによるナビゲーション |
|
適用なし。 |
アクセラレータ |
アクセラレータは、"サポートなし" 列に示されている場合を除き、通常どおり動作します。 |
テクノロジ間で重複するアクセラレータは、通常の重複するアクセラレータのようには動作しません。 アクセラレータがテクノロジ間で重複する場合、つまり、Windows Forms コントロールに 1 つ以上、および WPF コントロールにも他のアクセラレータがある場合は、Windows Forms コントロールはアクセラレータを常に受け取ります。 重複するアクセラレータ キーが押された場合、フォーカスはコントロール間で切り替わりません。 |
ショートカット キー |
ショートカット キーは、"サポートなし" 列に示されている場合を除き、通常どおり動作します。 |
|
AcceptsReturn、AcceptsTab、およびその他のコントロール固有の動作 |
既定のキーボードの動作を変更するプロパティは、Windows Forms コントロールが IsInputKey メソッドをオーバーライドして true を返す場合、通常どおり動作します。 |
KeyDown イベントで既定のキーボードの動作を変更する Windows Forms コントロールは、ホストの WPF コントロールで最後に処理されます。 これらのコントロールは最後に処理されるため、予期しない動作が発生する場合があります。 |
Enter イベントと Leave イベント |
含まれている ElementHost コントロールにフォーカスが移動しない場合に、フォーカスが 1 つの WindowsFormsHost コントロールで変更されると、Enter イベントと Leave イベントは通常どおり発生します。 |
Enter イベントと Leave イベントは、次のフォーカスの変更が行われるまで発生しません。
|
マルチスレッド |
あらゆる種類のマルチスレッドがサポートされます。 |
Windows Forms と WPF の両方のテクノロジでは、シングルスレッドの同時実行モデルを前提にしています。 デバッグ中は、他のスレッドからフレームワーク オブジェクトを呼び出すと例外が発生し、この要件が強制されます。 |
セキュリティ |
すべての相互運用シナリオには完全な信頼が必要です。 |
相互運用シナリオは、部分的な信頼ではサポートされません。 |
ユーザー補助 |
すべてのアクセシビリティ シナリオがサポートされます。 支援技術製品は、Windows Forms と WPF の両方のコントロールを含むハイブリッド アプリケーションで使用すると正しく動作します。 |
適用できません。 |
クリップボード |
すべてのクリップボードは通常どおり操作できます。 これには、Windows Forms コントロールと WPF コントロール間の切り取りと貼り付けも含まれます。 |
適用できません。 |
ドラッグ アンド ドロップ機能 |
すべてのドラッグ アンド ドロップは通常どおり操作できます。 これには、Windows Forms コントロールと WPF コントロール間の操作も含まれます。 |
適用なし。 |
Windows フォームでの WPF コントロールのホスト
次の相互運用のシナリオは、Windows Forms コントロールが WPF コントロールをホストする場合にサポートされます。
コードを使用して 1 つ以上の WPF コントロールをホストする。
プロパティ シートを 1 つ以上のホストされている WPF コントロールに関連付ける。
フォームで 1 つ以上の WPF ページをホストする。
WPF ウィンドウを起動する。
Windows Forms マスターおよび WPF 詳細を使用したマスター/詳細フォームのホスト。
WPF マスターおよび Windows Forms 詳細を使用したマスター/詳細フォームのホスト。
カスタム WPF コントロールをホストする。
ハイブリッド コントロールをホストする。
アンビエント プロパティ
Windows Forms コントロールの一部のアンビエント プロパティは、WPF と同等の機能があります。 これらのアンビエント プロパティは、ホストされている WPF コントロールに適用され、ElementHost コントロールのパブリック プロパティとして公開されます。 ElementHost コントロールは、各 Windows Forms アンビエント プロパティをその WPF の等価プロパティに変換します。
詳細については、「Windows フォームと WPF プロパティの割り当て」を参照してください。
動作
相互運用動作の説明を次の表に示します。
動作 |
サポート状況 |
サポートなし |
---|---|---|
透過性 |
WPF コントロールのレンダリングは透過性をサポートします。 Windows Forms の親コントロールの背景を、ホストしている WPF コントロールの背景にすることができます。 |
適用なし。 |
マルチスレッド |
あらゆる種類のマルチスレッドがサポートされます。 |
Windows Forms と WPF の両方のテクノロジでは、シングルスレッドの同時実行モデルを前提にしています。 デバッグ中は、他のスレッドからフレームワーク オブジェクトを呼び出すと例外が発生し、この要件が強制されます。 |
セキュリティ |
すべての相互運用シナリオには完全な信頼が必要です。 |
相互運用シナリオは、部分的な信頼ではサポートされません。 |
ユーザー補助 |
すべてのアクセシビリティ シナリオがサポートされます。 支援技術製品は、Windows Forms と WPF の両方のコントロールを含むハイブリッド アプリケーションで使用すると正しく動作します。 |
適用できません。 |
クリップボード |
すべてのクリップボードは通常どおり操作できます。 これには、Windows Forms コントロールと WPF コントロール間の切り取りと貼り付けも含まれます。 |
適用できません。 |
ドラッグ アンド ドロップ機能 |
すべてのドラッグ アンド ドロップは通常どおり操作できます。 これには、Windows Forms コントロールと WPF コントロール間の操作も含まれます。 |
適用できません。 |
参照
処理手順
チュートリアル: WPF での Windows フォーム コントロールのホスト
参照
概念
チュートリアル: WPF での Windows フォーム複合コントロールのホスト