winforms icon indicating copy to clipboard operation
winforms copied to clipboard

ElementHost control (Wpf Interoperability) do not display in Toolbox WinForms designer And Can not add Wpf UserControl in winform designer

Open MauNguyenVan opened this issue 2 years ago • 18 comments

Environment

VisualStudio 17.6.4

.NET version

  • Windows Form App template
  • .NET core 7.0

Did this work in a previous version of Visual Studio and/or previous .NET release?

It works in .NET framework 4.8

Issue description

  • Can not display ElementHost (Wpf Interoperability)

ElemenHostNotFound

  • Can not add Wpf UserControl in the Winform in design mode

WpfControlCannotAdd

Steps to reproduce

  • Create a new Windows Form App project with a target framework 7.0.
  • Open Form1.cs in design mode
  • Open Toolbox then search ElementHost (not found this control)

Image WinFormApp .net core 7.0

image

But with .net framework 4.8 has it and works fine Untitled

Diagnostics

No response

MauNguyenVan avatar Jul 08 '23 02:07 MauNguyenVan

@Olina-Zhang can you check if this repros in .net 6 please?

elachlan avatar Jul 08 '23 06:07 elachlan

In my computer, .NET 6 has the same error

MauNguyenVan avatar Jul 08 '23 09:07 MauNguyenVan

Much appreciated. Team will need to have a look.

elachlan avatar Jul 08 '23 10:07 elachlan

@Olina-Zhang can you check if this repros in .net 6 please?

There are known issues in Winforms designer repo: https://github.com/microsoft/winforms-designer/issues/919, https://github.com/microsoft/winforms-designer/issues/2626.

Olina-Zhang avatar Jul 10 '23 01:07 Olina-Zhang

@Olina-Zhang can you check if this repros in .net 6 please?

There are known issues in Winforms designer repo: https://github.com/microsoft/winforms-designer/issues/919, https://github.com/microsoft/winforms-designer/issues/2626.

Sorry, these URLs do not exist. maybe i have not permission

MauNguyenVan avatar Jul 10 '23 12:07 MauNguyenVan

@MauNguyenVan the designer repo is currently closed source.

elachlan avatar Jul 10 '23 22:07 elachlan

This is known work that we have on our backlog in our private Designer repo. We don't have a specific timeline yet. We will keep you posted.

merriemcgaw avatar Jul 12 '23 20:07 merriemcgaw

I spent quite a time on this too, only to finally find this issue. Would love to see this fix as I have customers relying on this control to bring WPF controls into winforms.

dotMorten avatar Feb 27 '24 04:02 dotMorten

This has been holding me back from migrating my main framework project to .net. I've worked around it by manually editing the form designer to add an element host (copying what happens to do the same thing in a framework app) Annoyingly if you create a wpf usercontrol, this will show up in the toolbox , but dragging it on to the form causes an error.

On this screen shot you can see I've manually added the wpf ctrl by hand, but if I drag from the toolbox I get this error.

elementhost

ImHappyMostOfTheTime avatar Mar 14 '24 11:03 ImHappyMostOfTheTime

Is there any news for this problem? I have a project in .net core, but I didn't know about the problem otherwise I would have created the project in .net framework.

bernox89 avatar May 02 '24 09:05 bernox89

Same here, stuck trying to port to .NET 8. Initially build worked and my ElementHost-ed WPF component worked well and then... it just dissapeared from the designer.

I can still see my WPF user control in the Toolbox palette but I can't see Element Host / WPF integration anymore and I can't add the WPF user control directly. It comes up with a generic message how the component should implement IComponent and have suitable constructor but this is already the case and I can use the WPF component in WPF projects so it must be the designer issue.

If there is no timeline for the Designer fix, could you at least provide a workaround or any insight into what is happening??

molt2020 avatar May 04 '24 12:05 molt2020

@molt2020 the elementhost works just fine - you just have to add it in code (or copy it over from a framework version). It’s only that it won’t show in the designer but otherwise the designer continues to work for other controls

dotMorten avatar May 04 '24 18:05 dotMorten

Thank you @dotMorten - I reverted the code and it compiles and works! 👍

It would be good to have this fixed so it shows in the palette as manually editing designer files is no fun

molt2020 avatar May 04 '24 18:05 molt2020

@molt2020 the elementhost works just fine - you just have to add it in code (or copy it over from a framework version). It’s only that it won’t show in the designer but otherwise the designer continues to work for other controls

I didn't succeed without having it in the toolbox. Can you give some examples of how you managed to integrate the control. A thousand thanks.

bernox89 avatar May 04 '24 20:05 bernox89

@bernox89 I just reverted code back to what Designer made and after Designer decided to remove the entire component from the designer code. So far, the Designer has not removed the code again. Here is the code in case it is helpful

private System.Windows.Forms.Integration.ElementHost elementHost_CurrentRecordInfo; this.elementHost_CurrentRecordInfo = new System.Windows.Forms.Integration.ElementHost(); this.elementHost_CurrentRecordInfo.Child = this.myWPFControl;

there is no other ElementHost-specific code to hoist the myWPFControl into it. There is some extra code int the designer to place the elementHost_CurrentRecordInfo onto the Windows Form (i.e. into a Grid Cell etc) which will be different for your project anyway so I have removed it from the post here as clutter.

You don't have to keep this in the .Designer.cs file either if you worry the Designer may overwrite or remove it.

Hope it helps.

molt2020 avatar May 05 '24 10:05 molt2020

thanks for the help anyway. I solved it independently only from C# code following these steps, without having elementhost available from the toolbox:

  1. Set properties in winforms project to also use WPF
  2. Import any WPF libraries using project references
  3. Enter any uses for the wpf controls/libraries
  4. with this code example it works great, in my case I needed to have the syncfusion tool to edit images and have it on winforms which does not exist natively.

using section: using System.Windows.Forms.Integration; using Syncfusion.Licensing; using Syncfusion.Windows.Controls; using Syncfusion.Windows.Shared; using Syncfusion.Windows.Tools; using Syncfusion.UI.Xaml.ImageEditor;

code to use the control:

SfImageEditor imageEditor = new SfImageEditor(); ElementHost host = new ElementHost(); host.Dock = DockStyle.Fill; host.Child = imageEditor; this.Controls.Add(host); host.Dock = DockStyle.Fill;

I hope I have been useful to someone

the only thing we don't have is the graphic control available in the designer, but it comes second in my opinion.

bernox89 avatar May 19 '24 01:05 bernox89

While its possible to add a wpf control/ElementHost by hand I'm reluctant to do this in my production project as it doesn't feel like its supported by Microsoft. Perhaps this is Microsoft's way of pushing us to use WinUI 3? I wouldn't mind but WinUI is missing so many features, feels like its still very early in development. So for now I'm choosing to stay with .net framework which I don't really want to.

ImHappyMostOfTheTime avatar May 21 '24 08:05 ImHappyMostOfTheTime

Started to get this behaviour after updating vs to 17.10. Stopped using the out of process designer for winforms, reopened the solution and now it's back in the toolbox

IefVandepitte avatar Jun 25 '24 07:06 IefVandepitte

reponing doesn't fix the issue for me, net 8.

xmaxrayx avatar Jul 13 '24 10:07 xmaxrayx

Ok I switched from Net 8 to NET Framework 4(only windows), and fixed my issue.

xmaxrayx avatar Jul 13 '24 10:07 xmaxrayx

@ImHappyMostOfTheTime what makes you think it isn’t supported? It’s fully supported in your app. It is only the design time experience that isn’t. If a lacking design time experience would be the reason something isn’t supported you’d think winui3 is completely unsupported since it doesn’t have a designer at all 😉

dotMorten avatar Jul 13 '24 15:07 dotMorten

@dotMorten , I think having to edit a file that clearly says it shouldn't be edited doesn't suggest its supported.

ImHappyMostOfTheTime avatar Jul 15 '24 08:07 ImHappyMostOfTheTime