Добавление обработчика для WPF Control внутри WinForms приложения

Краткий пример, как ответ на вопрос, который получил из Contact Form в блоге.

Думаю, многие знают, что WPF и WinForms можно удобно совмещать в проектах – использовать WPF элементы управления внутри WinForms приложений, чтобы поэтапно расширять визуальные возможности приложения на самых сложных участках, и, наоборот, использовать WinForms элементы управления внутри WPF приложений для быстрого повторного использования кода (существующих элементов управления), когда не хватает времени реализовать что-то существующее для WinForms на WPF.

Об этом и рассказываю и показываю на демонстрациях в кратком 15-минутном вебкасте на TechDays.ru - https://www.techdays.ru/Lecture.aspx?LID=3efb4acc-4505-4109-94a5-27056af548d2 

Из Contact Form в блоге я получил вопрос - “как быстро подключить обработчик для WPF кнопки в WinForms приложении”,  отвечаю:

Создаем новое WinForms приложение

 image

на toolbox в разделе WPF Interoperability выбираем ElementHost и кидаем его на форму

image

это действие также автоматически добавит нам ссылки на сборки WPF:

image

после этого переключаемся в код, создаем кнопку в коде, делаем её потомком ElementHost и подключаем обработчик события Click:

    1: using System;
    2: using System.Collections.Generic;
    3: using System.ComponentModel;
    4: using System.Data;
    5: using System.Drawing;
    6: using System.Linq;
    7: using System.Text;
    8: using System.Windows.Forms;
    9:  
   10: namespace WindowsFormsApplication3
   11: {
   12:     public partial class Form1 : Form
   13:     {
   14:         System.Windows.Controls.Button btn1;
   15:         public Form1()
   16:         {
   17:             InitializeComponent();
   18:             btn1 = new System.Windows.Controls.Button();
   19:             btn1.Click += new System.Windows.RoutedEventHandler(btn1_Click);
   20:             elementHost1.Child = btn1;
   21:         }
   22:  
   23:         void btn1_Click(object sender, System.Windows.RoutedEventArgs e)
   24:         {
   25:             MessageBox.Show("Clicked!");
   26:         }
   27:     }
   28: }

причем при подключении события нам, естественно, помогает IntelliSense:

image

Собственно, все. Нажимаем F5.

image

И получаем хостинг WPF элемента управления внутри WinForms приложения.

Про обратный сценарий, а также про более сложные сценарии – DataBinding, хостинг GridView, смотрите вебкаст - https://www.techdays.ru/Lecture.aspx?LID=3efb4acc-4505-4109-94a5-27056af548d2

Код данного простейшего приложения - прикреплен к данному посту.

WindowsFormsApplication3.zip