WinForm用户控件和WPF

4

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

我只是粗略地看了一下WPF。有人能否评论一下WinForm用户控件是否可以在WPF上使用,以及WinForm用户控件与WPF用户控件有何不同?

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

2个回答

5

使用WindowsFormHost控件可以在WPF应用程序中使用WinForms控件,当然这是可能的。通常情况下,有一些注意事项需要遵守,特别是两种控件类型不太适配。

但是这样做似乎会阻止您充分利用切换到WPF的许多(如果不是几乎全部)优点。如果您有一个可行的大型代码库,我不确定为什么您觉得需要迁移。总会有更新的东西出现。真正的问题是要弄清楚是否真的更好,至少对于您的特定情况。

强制声明:我远非WPF专家,显然比许多开发人员对WinForms不那么厌倦。因此,也许我的建议应该带着一丝怀疑,但我认为仍值得考虑。


我刚刚读到关于WinForms更多地走向维护模式,而不是微软努力添加新功能。我想在有时间的时候开始研究一下WPF(哈哈!)。如果WinForms在未来很多年仍然可行,那对我来说也没问题! - Jonathan Wood
@Jonathan:WinForms确实处于“维护模式”,但我不太确定这在实际上意味着什么。自VC++ 6.0发布以来,MFC一直处于维护模式。最近发布了一个功能包,但这需要微软付出相对较少的工作。它仍然是一个完全可行的平台。我不确定为什么WinForms应该期望有不同的命运。我也不太赞成每个应用程序设计师都发明自己的GUI的推动。为什么每个应用程序都需要绘制自己的菜单和按钮?我们不能让操作系统来做吗?但这是另一个话题。 - Cody Gray
我认为MFC已经正式退出维护模式。除了功能包已被扩展并纳入基础产品外,还增加了一些重要的语言功能,现在有一些非常酷的东西正在开发中。相比之下,VB6则处于维护模式。 VB6开发人员几乎被冷落了。 - Jonathan Wood

3
您的控件将是可重用的(通过WindowsFormHost,就像Cody建议的那样)。然而,我不会指望能够将您的代码移植到WPF。基本的编程模型非常不同(WPF严重依赖数据绑定,因此受益于非常不同的代码后台),呈现模型也是如此(WPF不使用GDI+)。在WPF中处理大多数控件的最佳方法是使用内置的模板化;除了自定义布局面板(这不是真正的“绘图”)之外,我迄今为止没有发现任何需要在控件中使用自定义绘制方法的东西。
创建一个WPF应用程序来托管您的WinForms控件肯定是浪费的。WPF可能(或可能不是!)是“未来”,但这并不意味着您应该一时冲动地放弃现有的东西。
您说您只是表面看了一下。如果您认为值得投资,为什么不进行一个R&D项目,以证明如何在系统的一小部分中进行集成?

(Pedant)WinForms 也不使用 GDI,而是使用 GDI+。但是没错,WPF 使用基于 DirectX 的完全不同的渲染模型。 - Cody Gray
@Dan:你在WPF中还能进行自绘吗?看起来它显然更适合那些拖放式的程序员。 - Jonathan Wood
在WPF中?只需要三行标记。这就是它的强大之处!如果您在这里提出问题,我会回答您的;-) - Dan Puzey
@Jon:调色板网格的示例:将ListBox绑定到颜色列表,将布局面板从默认的StackPanel更改为WrapPanel(标准布局面板,将您的项目包装成多行框),并设置类似于我上面给出的自定义模板,以便每种颜色都显示为一个框。非常简单!老实说:WPF在自定义控件布局和内容方面提供了大量功能。我从未发现需要更多的东西,只需使用自定义布局面板(它只定位其他元素-它本身不绘制任何内容)。 - Dan Puzey
我总是对你在纯Xaml标记中所能做到的惊叹不已。试着下载Kaxaml(免费下载 - 基本上是一个Xaml草稿本)并进行一些尝试。我的最爱演示(尽管没有任何聪明的UI)始终是用大约20行标记编写RSS阅读器 :-) - Dan Puzey
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接