我花了一些时间研究WinForm用户和自定义控件。然而,在我的脑海中,越来越响亮的声音说WinForm技术已经过时,WPF是桌面的未来。
我只是粗略地看了一下WPF。有人能否评论一下WinForm用户控件是否可以在WPF上使用,以及WinForm用户控件与WPF用户控件有何不同?
我正在处理的大多数控件都会进行所有者绘制,而不是将子控件放置到控件中。我只是想知道这些代码在WPF下有多少可重用性。
我花了一些时间研究WinForm用户和自定义控件。然而,在我的脑海中,越来越响亮的声音说WinForm技术已经过时,WPF是桌面的未来。
我只是粗略地看了一下WPF。有人能否评论一下WinForm用户控件是否可以在WPF上使用,以及WinForm用户控件与WPF用户控件有何不同?
我正在处理的大多数控件都会进行所有者绘制,而不是将子控件放置到控件中。我只是想知道这些代码在WPF下有多少可重用性。
使用WindowsFormHost
控件可以在WPF应用程序中使用WinForms控件,当然这是可能的。通常情况下,有一些注意事项需要遵守,特别是两种控件类型不太适配。
但是这样做似乎会阻止您充分利用切换到WPF的许多(如果不是几乎全部)优点。如果您有一个可行的大型代码库,我不确定为什么您觉得需要迁移。总会有更新的东西出现。真正的问题是要弄清楚是否真的更好,至少对于您的特定情况。
强制声明:我远非WPF专家,显然比许多开发人员对WinForms不那么厌倦。因此,也许我的建议应该带着一丝怀疑,但我认为仍值得考虑。
WindowsFormHost
,就像Cody建议的那样)。然而,我不会指望能够将您的代码移植到WPF。基本的编程模型非常不同(WPF严重依赖数据绑定,因此受益于非常不同的代码后台),呈现模型也是如此(WPF不使用GDI+)。在WPF中处理大多数控件的最佳方法是使用内置的模板化;除了自定义布局面板(这不是真正的“绘图”)之外,我迄今为止没有发现任何需要在控件中使用自定义绘制方法的东西。ListBox
绑定到颜色列表,将布局面板从默认的StackPanel
更改为WrapPanel
(标准布局面板,将您的项目包装成多行框),并设置类似于我上面给出的自定义模板,以便每种颜色都显示为一个框。非常简单!老实说:WPF在自定义控件布局和内容方面提供了大量功能。我从未发现需要更多的东西,只需使用自定义布局面板(它只定位其他元素-它本身不绘制任何内容)。 - Dan Puzey