WPFコントロールをWindowsフォームフォームにどのように配置しますか?ほとんどの場合、WPFコントロールをWindows.Forms.Panelに挿入します。
パネル内に ElementHost
コントロールを配置します。このコントロールは、WPF要素をホストできます。 WinFormsデザイナーから、このコントロールは「WPF Interoperability」の下にあります。最初に、WindowsFormsIntegration.dllをプロジェクトの参照に追加する必要がある場合があります。
例については、「 チュートリアル:WindowsフォームでのWPF複合コントロールのホスト 」を参照してください。
これを読んでみてください:
WindowsフォームアプリケーションでのWPFコントロールのホスト
http://community.infragistics.com/wpf/articles/hosting-a-wpf-control-in-a-windows-forms-application.aspx
最初に、WPF名前空間(PresentationCore、PresentationFramework、UIAutomationProvider、UIAutomationTypes、およびWindowsBase)への参照を追加します。次に、ElementHostコントロールのインスタンスとWindowsフォームアプリケーションに埋め込むコントロールを作成し、そのコントロールをElementHostコントロールにフックします。次に、ElementHostコントロールをFormsコントロールコレクションに追加します。
ElementHost Host = new ElementHost();
System.Windows.Controls.ListBox wpfListBox = new System.Windows.Controls.ListBox();
for (int i = 0; i < 10; i++)
{
wpfListBox.Items.Add("Item " + i.ToString());
}
Host.Dock = DockStyle.Fill;
Host.Controls.Add(wpfListBox);
this.panel1.Controls.Add(Host);
ただし、XAML
を使用してWindows Formsアプリケーションで使用するWPFコントロールを記述する場合は、Avalon UserControlアイテムをプロジェクトに追加する必要があります。これにより、UserControl1.xaml
ファイルとUserControl1.xaml.cs
ファイル。次に、UserControl1.xamlファイルを変更して、コントロールを記述したいXAMLを含めることができます。次に、このコントロールのインスタンスを作成して、それを
ElementHost control as in the above example:
ElementHost Host = new ElementHost();
UserControl1 uc1 = new UserControl1();
Host.Controls.Add(uc1);
Host.Dock = DockStyle.Fill;
this.panel1.Controls.Add(Host);
さらに、WindowsアプリケーションはXAMLファイルを処理しないため、プロジェクトファイルを変更する必要があります。メモ帳などのエディターでプロジェクトファイル(.csproj、.vbprojなど)を開き、一番下までスクロールする必要があります。次の行が表示されます。
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
この行をコピーして上記の行のすぐ下に貼り付けてから、「CSharp」を「WinFX」に変更して、2行が次のようになるようにします。
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildBinPath)\Microsoft.WinFx.targets" />
次に、このファイルを保存し、VSを使用してプロジェクトをリロードし、アプリケーションを実行します。
クイックリファレンスのために上記の回答を要約します。
プロジェクトの編集を台無しにせず、デザイナーに固執したい場合:
通常はウィンドウの\ reference assembly\Microsoft\FrameworkからのWindowsFormsIntegration.dll
の参照を追加してください...
ソリューションでwpfユーザーコントロールを使用している場合は、おそらく既に参照しています
System.Windows.Presentation、System.Windows.Activities、System.Windows.CompnentModel、System.Windows..RunTime、System.Windows.WorkFlowServices、System.Xaml。
それ以外の場合は、必要な前述の参照を追加してください。
windowsフォームメンバーで、次のようにwpf usercontrol myWpfUsrCtlをWindowsフォームに追加します。
void addWpfUsrCntl()
{
var elemthost1 = new System.Windows.Forms.Integration.ElementHost();
elemthost1.Dock = DockStyle.None; // change to to suit your need
// you can add the WPF control to the form or any other desired control
elemthost1.Parent = this;
//elemthost1.AutoSize = true; // change to to suit your need
... // change to to suit your need
elemthost1.Child = myWpfUsrCtl; // Assign the WPF control
}