WinForm用户控件和WPF

WinForm用户控件和WPF,wpf,winforms,user-controls,Wpf,Winforms,User Controls,我花了一些时间研究WinForm用户和自定义控件。然而,在我的脑海里,有越来越响亮的声音在说WinForm技术已经过时,WPF是桌面的未来 我只是肤浅地看了看WPF。有人能评论一下WinForm用户控件是否可以在WPF上使用,以及WinForm用户控件与WPF用户控件的区别吗 我正在处理的大多数控件都会进行某种类型的所有者绘制,而不是将子控件放到控件上。我只是想知道在WPF下有多少代码是可重用的。在WPF应用程序中使用WinForms控件肯定是可行的。和往常一样,这里有一些警告。特别是,这两种控

我花了一些时间研究WinForm用户和自定义控件。然而,在我的脑海里,有越来越响亮的声音在说WinForm技术已经过时,WPF是桌面的未来

我只是肤浅地看了看WPF。有人能评论一下WinForm用户控件是否可以在WPF上使用,以及WinForm用户控件与WPF用户控件的区别吗

我正在处理的大多数控件都会进行某种类型的所有者绘制,而不是将子控件放到控件上。我只是想知道在WPF下有多少代码是可重用的。

在WPF应用程序中使用WinForms控件肯定是可行的。和往常一样,这里有一些警告。特别是,这两种控件类型没有很好地重叠

然而,这样做似乎会阻止您从一开始就利用切换到WPF的许多好处(如果不是几乎所有的话)。如果您有一个为您工作的大型代码库,我不知道您为什么觉得需要迁移。总会有更新的东西出现。真正的战斗是弄清楚是否真的更好,至少对于你的特殊情况是这样


强制性免责声明:我远不是WPF方面的专家,而且显然比许多开发人员对WinForms不那么厌倦。因此,也许我的建议应该被采纳,但我认为还是值得考虑的。

您的控件将是可重用的(正如科迪建议的那样,通过
WindowsFormHost
)。然而,我不指望能够将您的代码移植到WPF。基本编程模型完全不同(WPF严重依赖于数据绑定,因此受益于非常不同的代码隐藏),渲染模型也是如此(WPF不使用GDI+)。在WPF中接近大多数控件的最佳方法是使用内置模板;除了自定义布局面板(它不是真正的“绘图”),到目前为止,我还没有发现任何需要在控件中使用自定义绘图方法的东西

仅仅为了托管WinForms控件而创建WPF应用程序肯定是一种浪费。WPF可能(也可能不是!)是“未来”,但这并不意味着你应该一时兴起就扔掉你拥有的东西


你说你只看了表面。如果您认为值得投资,为什么不做一个研发项目来证明集成如何在系统的一小部分上工作?

(学究)WinForms也不使用GDI;它使用GDI+。但是是的,WPF使用的是基于DirectX的。丹:你还能在WPF中进行所有者绘制吗?看起来它绝对是面向拖放程序员的。@乔纳森:绝对不是面向拖放的-除了混合动画,在WPF中雕刻UI的最好方法是手动拖动标记,如果你在幕后有一个好的
ViewModel
类,它的功能会是多么强大。也就是说,每个控件上的
OnRender
方法都会传递一个
DrawingContext
,如果您愿意,您可以使用它做任何您想做的事情,尽管我不知道您为什么要这样做@丹:你不知道你为什么要画主人画?例如,如何在WPF中创建一个列出颜色而不是文本的组合框?三行标记。这就是它的力量!在这里提问,我会给你一个答案;-)我刚刚读到WinForms更多地转向维护模式,而不是Microsoft正在努力添加新功能。我想我需要在有时间的时候开始看WPF(哈!)。如果WinForms在未来的许多年中仍然可行,那我就没问题了@Jonathan:WinForms确实处于“维护模式”,但我不确定这在实际中意味着什么。自VC++6.0发布以来,MFC一直处于维护模式。最近发布了一个功能包,但这对微软来说需要做的工作相对较少。它仍然是一个完全可行的平台。我不知道为什么WinForms会有不同的命运。我也不太喜欢推动每个应用程序设计师发明自己的GUI。为什么每个应用程序都需要绘制自己的菜单和按钮?我们就不能让操作系统这么做吗?但这是另一个肥皂盒。我认为MFC已经正式退出维护模式。除了功能包(现已扩展并纳入基础产品)之外,还添加了重要的语言功能,现在正在进行一些非常酷的工作。与VB6的维护模式进行对比。VB6开发人员几乎被冷落了。