より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

WinFormsとWPFを共存させる

WinFormsのプロジェクトを作成します。

参照を追加

f:id:rimever:20210220193618p:plain
System.Xamlを追加

WPFのウインドウの代わりにUserControlを追加

f:id:rimever:20210220193759p:plain
Windowが選べないのでUserControlで

WPFは後で、.xaml、.xaml.cs共に継承元のUserControlをWindowに変更します。

WPFからWinFormsの呼び出し

        private void button1_Click(object sender, EventArgs e)
        {
            var wpf = new WpfWindow();
            wpf.ShowDialog();
        }

WinFormsからWPFの呼び出し

        private void ButtonShowWinFormsOnClick(object sender, RoutedEventArgs e)
        {
            var form = new Form1();
            form.ShowDialog();
        }

どっちも同じですね。WinFormsのShowDialogにはownerを指定できるのですが、WPFのWindowをthisとして渡すことはできません。

f:id:rimever:20210220194540p:plain

課題

今回は.NET Frameworkからやってますが、最新の.NET Coreについては同じような方法が取れなさそうです。

サイドバーにアセンブリが表示されず、Xamlを選択と言うことができません。

解像度の問題なのかWinFormsからWPFを呼び出すと、呼び出し元のWinFormsのウインドウサイズが変動してしまいました。

どちらかに統一した方が無難ですね。