WPF 中的自定义控件与 Winforms 中一样必要吗?

Custom Control in WPF as necessary as in Winforms?

面试的时候,公司问我在WPF中使用自定义控件的情况。我发现使用 WPF 创建控件(数据模板、控件模板、样式、触发器等...)的所有功能,实际上没有必要编写覆盖 OnRender 方法的自定义控件。后来发现,他们的大部分开发都是在Winforms中进行的。

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

谢谢 哈罗德

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

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

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

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

  1. 带轮廓的文本块。仅仅是因为您需要自定义 OnRender(为轮廓构建和绘制几何图形)。

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

  3. 图表。仅仅因为它太复杂而无法用 Visual 呈现,并且由于使用 gdi+ 的性能,可以在 ms.

  4. 内绘制数百万个点(成千上万的数字)

结论:虽然比 winforms 中的要少得多(但您只有 没有 其他选项)。