【问题标题】:Custom Control in WPF as necessary as in Winforms?WPF 中的自定义控件是否与 Winforms 中一样?
【发布时间】:2015-01-06 00:11:16
【问题描述】:

在一次采访中,该公司询问我在 WPF 中使用自定义控件的情况。我发现,使用 WPF 创建控件(数据模板、控件模板、样式、触发器等)的方式的所有功能,确实不需要编写重写 OnRender 方法的自定义控件。后来发现他们的大部分开发都是在Winforms中进行的。

如果从 100% WPF 方向进入控件,需要多久编写一次带有 OnRender 覆盖的自定义控件? Winform 方法实际上并没有利用 WPF 组合技术来创建控件,而且这似乎是一个没有太多 WPF 知识基础的问题。

谢谢 哈罗德

【问题讨论】:

  • 在使用 WPF 的这些年里,我想我已经编写了 2 个自定义控件。那些人对WPF一无所知。仅当您真的知道自己在做什么时,重写 OnRender() 才是一个好主意,而不是通过将 WPF 视为 winform 来尝试将方形钉卡在圆孔中。
  • WPF != 以任何方式实现 Winforms
  • @HighCore 2.513自定义控件怎么写?不要回答,我小时候见过很多半生不熟的代码。
  • @danish 我听不懂你的评论
  • 顺便说一句,为了清楚起见,我在 WPF 中编写了各种“自定义 UI”,从图表设计器到面包屑栏到动画时间线,再到棋盘到仪表控件甚至指南针.其中没有一个需要覆盖 OnRender()。

标签: c# wpf winforms custom-controls


【解决方案1】:

好问题(虽然有点基于意见)但没有答案?修复。

如果你是 winforms 经验丰富的开发者,那么在 wpf 中思考 winform-way 仍然是可以接受的。一阵子。在这里您可能会发现自己制作的主要是自定义控件(包含 xaml 和代码,甚至没有 xaml)。但是你学得越多,你就越不需要它。在 wpf 中可以完成很多很多任务,仅仅是因为它非常灵活。每个实体都包含可以自定义的内容:模板、样式、转换器、行为甚至是普通的事件处理。

您可以从自定义控件开始,然后找出您真正不需要的控件(或者可以将其降级为简单的重新设置样式)。

当我开始制作第一个严肃的 wpf 项目时,有 3 个自定义控件,它们仍然存在。这就是原因。

  1. 大纲文本块。仅仅是因为您需要自定义OnRender(用于构建和绘制几何轮廓)。

  2. 动画内容。在更改内容时应用过渡动画。我几乎可以在没有自定义控件的情况下完成它,但是有一个问题 - 在从左到右、从右到左、上下或上下转换时计算动画逻辑。在一个自定义控件中拥有很容易。但可以使用UserControl 和视图,但不那么漂亮。

  3. 图表。仅仅因为它太复杂而无法使用Visual 呈现,并且由于使用 gdi+ 的性能可以在ms 内绘制数百万个点(数十万个数字)。

结论:它很好也很有用,虽然比在 winforms 中要少得多(您只是 没有 其他选项)。

【讨论】:

  • 感谢您的反馈...在一定程度上可能是基于意见的,但是对于来自 Winforms 的新 WPF 开发人员来说,这可能对指导 WPF 的正确使用有很大帮助。使用模板、样式、触发器在很大程度上是 WPF WPF 的组成部分。所以这似乎也是一个有效的技术讨论......谢谢,重要的是要知道未来的雇主是否知道他们在做什么......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
相关资源
最近更新 更多