繁体   English   中英

Windows窗体中的WPF控件?

[英]WPF control in windows forms?

我想创建一些可以同时使用WPF和Windows窗体的自定义UI控件。

这可能吗?

如果是这样,我可以在WPF中创建这些控件,还是需要使用Windows窗体控件?

还有其他考虑事项吗?

回答:

  1. 对的,这是可能的。
  2. 是的,您可以在WPF中创建它们。
  3. 主要考虑因素是,当使用WinForms中的WPF控件时,需要将其包装在HwndSource

如果要编写控件库,通常最好在WPF中实现控件(因为它比WinForms强大得多),然后为其创建代理以使其易于在WinForms中使用。

代理最容易实现,如下所示:

  1. System.Windows.Forms.Control派生代理
  2. 在代理的构造函数中:实例化WPF控件,将其添加到新构造的HwndSource ,并将HwndSource添加为代理的子级
  3. 向代理添加属性和方法,这些属性和方法只需调用真实WPF控件的等效属性和方法即可

或者,您可以选择不创建代理,而只是告诉WinForms用户,将控件添加到HwndSource时需要将其放入HwndSource中。

创建双重用途控件时遇到的大多数其他问题都是微不足道的或琐碎的。 例如,如果控件中具有接受图像的功能,则只需将其设计为接受WinForms的Bitmap或WPF的BitmapSource。 如果您有一个WPF控件,该控件通常仅支持RoutedEvents,请添加老式事件处理程序,以使WinForms人群感到舒适和方便。

ElementHost允许您将WPF控件嵌入WinForms表单内, WindowsFormsHost允许您将WinForms控件插入WPF窗口中。

两者都易于使用,并且在组成方面都存在一些小问题(您不能在WinForms元素上绘制WPF元素,等等)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM