I would like to create some custom UI controls that work with both WPF and Windows Forms.
Is this possible?
If so, can I create these controls in WPF or do I need ot use a Windows Forms control?
Are there any other considerations?
I would like to create some custom UI controls that work with both WPF and Windows Forms.
Is this possible?
If so, can I create these controls in WPF or do I need ot use a Windows Forms control?
Are there any other considerations?
Answers:
HwndSource
.If you're writing a control library, it is usually best to implement your control in WPF (because it is so much more powerful than WinForms), then create a proxy for it to allow it to easily be used in WinForms.
The proxy is most easily implemented as follows:
System.Windows.Forms.Control
HwndSource
, and add the HwndSource
as a child of your proxyAlternatively you could choose not to create a proxy, and instead just tell your WinForms users they need to put your control inside a HwndSource when they add it to their Form.
Most other issues you will encounter in creating a dual-use control are insignificant or trivial to fix. For example, if you have a feature in your control that accepts images, just design it to accept either WinForms' Bitmap or WPF's BitmapSource. And if you have a WPF control that would normally only support RoutedEvents, add old-fashioned event handlers for the comfort and convenience of the WinForms crowd.
ElementHost
will let you embed a WPF control inside a WinForms form, WindowsFormsHost
let's you insert WinForms controls into a WPF window.
Both are easy to use, and both have minor problems with composition (you can't draw a WPF element over a WinForms element, etc.).