Jump to content

  • Log In with Google      Sign In   
  • Create Account


#ActualSaoblol

Posted 22 August 2012 - 01:46 AM

Solved this for now by hosting a WindowForm Picturebox in the WPF Grid element, not very pretty but it does the job and doesnt have an impact on performance. Will probably look into it again when im closer to release, but I'd like to prioritize on other stuff first.

Code example for anyone who wants to do it the non-pretty way too:

private void window_TileEditor_Loaded(object sender, RoutedEventArgs e)
	{
	  System.Windows.Forms.Integration.WindowsFormsHost host = new System.Windows.Forms.Integration.WindowsFormsHost();
	  this.viewport = new System.Windows.Forms.PictureBox();
	  this.viewport.MouseEnter += new System.EventHandler(this.viewport_MouseEnter);
	  this.viewport.MouseLeave += new System.EventHandler(this.viewport_MouseLeave);
	  this.viewport.Width = 1280;
	  this.viewport.Height = 720;
	  host.Child = this.viewport;
	  this.grid_Viewport.Children.Add(host);
	}

Sadly, Im encountering another problem with WPF just after getting rid of this one. Since I need to update the Engine over and over, I cant use window.ShowDialog() since that halts the application, and window.Show() works but when using that, some of the WPF controls don't work properly anymore (cant type into text fields, but still can paste into them and delete stuff, just not type new characters directly, stuff like that)

Im already calling the Application.DoEvents() method but some stuff still doesnt work. Anything I forgot to do there?

Thanks again



Solved!

Found the solution after googling a lot:

Add WindowsFormsIntegration to your references, then:

YourWindow window = new YourWindow(); //Your WPF window class
System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(window);

Done :) Hope this helps someone too.

#1Saoblol

Posted 08 August 2012 - 04:07 PM

Solved this for now by hosting a WindowForm Picturebox in the WPF Grid element, not very pretty but it does the job and doesnt have an impact on performance. Will probably look into it again when im closer to release, but I'd like to prioritize on other stuff first.

Code example for anyone who wants to do it the non-pretty way too:

private void window_TileEditor_Loaded(object sender, RoutedEventArgs e)
    {
	  System.Windows.Forms.Integration.WindowsFormsHost host = new System.Windows.Forms.Integration.WindowsFormsHost();
	  this.viewport = new System.Windows.Forms.PictureBox();
	  this.viewport.MouseEnter += new System.EventHandler(this.viewport_MouseEnter);
	  this.viewport.MouseLeave += new System.EventHandler(this.viewport_MouseLeave);
	  this.viewport.Width = 1280;
	  this.viewport.Height = 720;
	  host.Child = this.viewport;
	  this.grid_Viewport.Children.Add(host);
    }

Sadly, Im encountering another problem with WPF just after getting rid of this one. Since I need to update the Engine over and over, I cant use window.ShowDialog() since that halts the application, and window.Show() works but when using that, some of the WPF controls don't work properly anymore (cant type into text fields, but still can paste into them and delete stuff, just not type new characters directly, stuff like that)

Im already calling the Application.DoEvents() method but some stuff still doesnt work. Anything I forgot to do there?

Thanks again

PARTNERS