Пользовательский обработчик рисования для элемента управления WinForms в приложении WPF - PullRequest
1 голос
/ 08 февраля 2012

У меня есть приложение WPF с размещенным внутри него элементом формы Windows, использующим этот метод:

System.Windows.Forms.Integration.WindowsFormsHost host =
    new System.Windows.Forms.Integration.WindowsFormsHost();

gMapZoom = new GMap();
gMapZoom.Paint += new PaintEventHandler(gMapZoom_Paint);
host.Child = gMapZoom; // gMapZoom is the Windows Form control
// Add the interop host control to the Grid
// control's collection of child controls.
this.grid1.Children.Add(host);

Однако у меня возникают проблемы при попытке добавить в него собственный обработчик событий Paint.Кажется, что добавление его в WPF (здесь не показано) приводит к тому, что рисование выполняется под элементом управления WinForm, поэтому сверху ничего не появляется.Добавление его в элемент управления WinForm ничего не делает;событие рисования (gMapZoom_Paint) даже никогда не вызывается.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 08 февраля 2012

Вы можете добавить событие PaintEventHandler в свой элемент управления Windows Form (gMapZoom)

 public event PaintEventHandler OnPaint;

 public GMap()
 {
   InitializeComponent();
   this.Paint += new PaintEventHandler(GMap_Paint);
 }

 void Gmap_Paint(object sender, PaintEventArgs e)
 {
     OnPaint(this, e);
 }

В коде WPF:

{
  System.Windows.Forms.Integration.WindowsFormsHost host =
                new System.Windows.Forms.Integration.WindowsFormsHost();

  gmap = new GMap();
  gmap.OnPaint += new System.Windows.Forms.PaintEventHandler(gmap_Paint);
  host.Child = gmap;
  this.grid1.Children.Add(host);
 }

void gmap_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
  //Custom paint         
}

Затем вы можете вызвать событие OnPaint:

gmap.Invalidate();
...