我正在考虑将我的 c# 应用程序从使用自定义 GDI+ 绘制的控件迁移到具有自定义控件等的 WPF 应用程序。我想知道所涉及的内容和预期的内容。
人们可以推荐任何可能有帮助的资源吗?或者确实有任何可能有益的个人经历?
(我提前为这篇长文道歉……我想表达的东西太多了……我希望它对你有帮助。)
这就是我们现在正在做的事情(将大量使用自定义 (GDI+) 绘制控件的 Windows 窗体应用程序迁移到 WPF)。事实上,我在团队中的角色是构建这些 GDI+ 控件……现在是构建 WPF 控件。
我同意 Bijington 的观点,即从头开始让您的应用程序完全 100% WPF 是要走的路……如果您能说服权力走这条路。但是,我们自己正在就地转换我们的 Windows 窗体应用程序,利用WPF 互操作功能。有一些限制,但总的来说,这是一种有效的方法(并不像我预期的那样令人沮丧)。
我建议您使用您的 GDI+ 控件之一并在 WPF 中构建相同的控件。然后,当你完成后,把它扔掉,然后再做一次。在第一次努力中,您总是会学到一些东西……并发现有更好的方法来代替。我会从一些小事开始……自定义按钮是一个很好的起点。
执行上述操作将使您了解您想做的所有其他事情都需要什么。
我要警告您的一件事是 WPF 的学习曲线,特别是如果您来自 Windows 窗体背景......特别是如果您要构建自定义外观控件。正如安倍所说,这是一个完全不同的世界。WPF 确实带来了很大的力量,但这种力量是以学习如何使用它为代价的。Abe 提到 WPF 中的自定义控件是如何“无外观”的,并且它们的“外观”可以通过 ControlTemplate 提供。这只是 WPF 中提供自定义外观的用户界面部分的众多方法之一。
让我列举一些额外的方法:
在 Windows 窗体中,就像他们给了您一把锤子 (UserControl) 和一把螺丝刀 (Control)。但是,在 WPF 中……他们为您提供了包含所有 100 种工具的整个工具箱。这是学习曲线大于正常的部分原因。但是,现在您可以使用以前从未有过的锯子来锯掉 2x4 的末端,而不是使用锤子和/或螺丝刀来尝试做同样的事情。
(好消息是有很多资源可以帮助你。)
MSDN
我同意 Bijington 的观点,即MSDN 文档非常出色。
博客
在我在上面的论坛部分中引用的两篇 StackOverflow 文章中的一篇中,我指向了我的“必读”列表中的一组博客。特别是,我会特别指出Pavan Podila和Kevin Moore的博客。Kevin Moore 曾经是 WPF 控件的 WPF 程序经理,他有一组很好的控件,称为WPF Bag-o-Tricks,它们很有用,但更重要的是,您可以从中学习控件。
样品、样品和更多样品
那里只有大量样品。几乎太多了!我将指向Family.Show(它是作为 WPF 的端到端参考示例创建的),我将指向WPF SDK 示例,特别是该部分中的控件自定义示例。
为 WPF 开发控件的方式发生了范式转变。您只需定义预期的行为,而不是定义所有行为并查找控件。
这是迁移到 WPF 的最困难的方面。您的控件类定义了行为契约,并公开了将用于呈现的属性,并且 ControlTemplate 用于定义控件的外观。
这也是 WPF 最强大的功能之一;在未来的任何时候,您的控件的使用者可以在不改变其行为方式的情况下改变它的外观。这使您的控件更容易进行主题化。