English 中文(简体)
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?

最佳回答

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.

问题回答

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





相关问题
Bring window to foreground after Mutex fails

I was wondering if someone can tell me what would be the best way to bring my application to the foreground if a mutex was not able to be created for a new instance. E.g.: Application X is running ...

How to start WinForm app minimized to tray?

I ve successfully created an app that minimizes to the tray using a NotifyIcon. When the form is manually closed it is successfully hidden from the desktop, taskbar, and alt-tab. The problem occurs ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

Handle DataTable.DataRow cell change event

I have a DataTable that has several DataColumns and DataRow. Now i would like to handle an event when cell of this DataRow is changed. How to do this in c#?

Apparent Memory Leak in DataGridView

How do you force a DataGridView to release its reference to a bound DataSet? We have a rather large dataset being displayed in a DataGridView and noticed that resources were not being freed after the ...

ALT Key Shortcuts Hidden

I am using VS2008 and creating forms. By default, the underscore of the character in a textbox when using an ampersand is not shown when I run the application. ex. "&Goto Here" is not ...

WPF-XAML window in Winforms Application

I have a Winforms application coded in VS C# 2008 and want to insert a WPF window into the window pane of Winforms application. Could you explain me how this is done.

热门标签