web-dev-qa-db-ja.com

WPFコントロールをWindowsフォームフォームに配置する

WPFコントロールをWindowsフォームフォームにどのように配置しますか?ほとんどの場合、WPFコントロールをWindows.Forms.Panelに挿入します。

30
Darkhydro

パネル内に ElementHost コントロールを配置します。このコントロールは、WPF要素をホストできます。 WinFormsデザイナーから、このコントロールは「WPF Interoperability」の下にあります。最初に、WindowsFormsIntegration.dllをプロジェクトの参照に追加する必要がある場合があります。

例については、「 チュートリアル:WindowsフォームでのWPF複合コントロールのホスト 」を参照してください。

35
Ani

これを読んでみてください:
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を使用してプロジェクトをリロードし、アプリケーションを実行します。



出典: http://windowsclient.net/learn/integration.aspx

4
Sergey Gavruk

クイックリファレンスのために上記の回答を要約します。

プロジェクトの編集を台無しにせず、デザイナーに固執したい場合:

通常はウィンドウの\ 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
}
0
gg89