Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
339 views
in Technique[技术] by (71.8m points)

c# - WPF control in windows forms?

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Answers:

  1. Yes, it is possible.
  2. Yes, you can create them in WPF.
  3. The main consideration is that when using a WPF control from WinForms it needs to be wrapped in an 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:

  1. Derive the proxy from System.Windows.Forms.Control
  2. In the proxy's constructor: instantiate your WPF control, add it to a newly constructed HwndSource, and add the HwndSource as a child of your proxy
  3. Add properties and methods to the proxy that simply call the equivalent properties and methods of the real WPF control

Alternatively 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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...