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


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


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


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


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

WindowsFormsApplication3.zip

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

Comments are closed.

Skip to main content