# SlimDX and WPF issue

This topic is 2168 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hi, I'm currently switching my project from WindowForms to WFP, but I'm having problems with rendering into an WPF Image Control.

This is what I do to get the Handle of the Image Control, but instead the scene is rendered across the whole window, not just the specified Image area

[source lang="csharp"]static void InitializeTileEditor()
{
WaterScene scene = new WaterScene();

window = new MainWindow();
window.Show();

HwndSource source = (HwndSource)HwndSource.FromVisual(window.image_Viewport);
//IntPtr viewportHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;

VEngine.Initialize(window, source.Handle, 1280, 720, 60, true);
VEngine.Run(scene);
}[/source]

I tried two ways of acquiering the handle, but both had the same result.

Any Ideas how I get the exact handle of the Image Control?

Edit: The handle will be used in the 3D Intialization of SlimDX to create the factory

[source lang="csharp"]factory.SetWindowAssociation(viewportHandle,
WindowAssociationFlags.IgnoreAll |
WindowAssociationFlags.IgnoreAltEnter);[/source] Edited by Saoblol

##### Share on other sites
I've never worked this out myself, but you can download a working project from http://slimdxcontrol.codeplex.com/ that demonstrates one method using his library which renders SlimDX into a D3DImage control.

##### Share on other sites
that is an old and nonworking example.

##### Share on other sites
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); } 

[s]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[/s]

Solved!

Found the solution after googling a lot:

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

Done Hope this helps someone too. Edited by Saoblol

1. 1
Rutin
24
2. 2
3. 3
JoeJ
18
4. 4
5. 5

• 38
• 23
• 13
• 13
• 17
• ### Forum Statistics

• Total Topics
631712
• Total Posts
3001849
×