C#GDI +和WPF之间的转换

TK.*_*TK. 25 c# wpf gdi+

我正在考虑将我的c#应用程序从使用自定义GDI +绘制控件迁移到带有自定义控件等的WPF应用程序.我想知道涉及的内容和期望的内容.

人们可以推荐哪些资源可能会有所帮助吗?或者确实任何可能有益的个人经历?

cpl*_*tts 37

(我为这篇长篇文章提前道歉......我想传达的内容真是太多了......我希望它可以帮到你.)

这就是我们现在正在做的事情(将大量使用自定义(GDI +)绘制控件的Windows窗体应用程序迁移到WPF).事实上,我在团队中的角色是构建这些GDI +控件......现在构建WPF控件.

我同意Bijington的说法,让你的应用程序从头开始完全100%WPF是你要走的路...如果你能说服那些能够走这条路的权力.但是,我们自己正在使用WPF互操作功能就地转换我们的Windows窗体应用程序.有一些限制,但总的来说它是一种有效的方法(而不是像我预期的那样令人沮丧).

我建议您使用一个GDI +控件并在WPF中构建相同的控件.然后,当你完成后,扔掉它再做一次.你会在第一次努力中总是学到一些东西......并发现有一种更好的方法可以做到.我会从小事开始......自定义按钮是一个很好的开始.

执行上述操作可以让您体验到您想要做的其他事情所需的内容.

我要警告你的一件事是WPF的学习曲线,特别是如果你来自Windows窗体背景......特别是如果你要构建自定义控件.正如安倍所说,这是一个完全不同的世界.WPF肯定会带来很多功能,但这种功能是以学习如何使用它为代价的.Abe提到WPF中的自定义控件是如何"看起来"的,并且它们的"外观"可以通过ControlTemplate提供.这只是WPF中提供用户界面的自定义部分的众多方法之一.

让我列举一些其他方法:

  1. 使用WPF的样式功能设置现有控件的样式.
  2. 利用WPF的内容模型和/或从ContentControl派生的控件.这允许您将任意外观的"内容"粘贴到控件的视觉效果中(例如,可能将自定义绘制的形状粘贴到按钮的中间).
  3. 通过利用UserControl从其他控件/元素中构造控件.
  4. 从WPF中的现有控件/类派生,扩展它的行为并提供不同的默认视觉效果集.
  5. 派生自FrameworkElement,通过覆盖部分或全部MeasureOverride,ArrangeOverride和OnRender方法创建自定义WPF元素.
  6. 还有更多......如果你能相信的话.

在Windows窗体中,就像他们给你一把锤子(UserControl)和一把螺丝刀(Control).但是,在WPF中......他们已经为您提供了所有100个工具的整个工具箱.这是大于正常学习曲线的部分原因.然而,现在你可以把你以前从未见过的锯子用来锯掉2x4的末端,而不是用锤子和/或螺丝刀试着做同样的事情.

资源

(好消息是,有很多资源可以帮助你.)

  1. 图书
    • 由Chris Sells和Ian Griffiths编写WPF编程(特别是第18章)
    • Matthew MacDonald的Pro WPF(特别是第24章)
    • 亚当·内森释放的WPF(特别是第16章)
    • 应用程序= Charles Petzold的代码+标记(特别是第10,11和12章)
    • Chris Anderson的基本WPF(特别是第3章)

      我最喜欢的书是Charles Petzold的书和Adam Nathan的书.然而,Sells和Griffiths的WPF编程的第18章对这个主题非常了解,特别是对问题的报道:我真的需要一个自定义控件吗?
  2. 论坛
    • WPF论坛
    • StackOverflow
      这里有两个帖子,你需要看一下(,).
  3. MSDN
    我同意Bijington认为MSDN文档非常出色.

  4. 博客
    一个我在论坛上面部分引用两个StackOverflow的帖子,我点了一组我的"必读"名单上的博客.特别是,我特别指出Pavan PodilaKevin Moore的博客.Kevin Moore曾经是WPF控件的WPF程序管理器,他有一套很好的控件,称为WPF Bag-o-Tricks很有用,但更重要的是,你可以学习控件.

  5. 样品,样品和更多样品
    那里只有大量的样品.几乎太多了!我将指向Family.Show(它是作为WPF的端到端参考样本创建的),我将指向WPF SDK示例,特别是该部分中的Control Customization示例.