WPF - 为什么微软没有提供一个好用的常用控件集?

7
我已经使用WPF几个月了,我非常喜欢它。但是有一件事情我不太明白,为什么微软不花更多的精力来帮助开发人员提供基本控件呢?我需要发泄一下:)
例如,我认为大多数应用程序都需要让您编辑某些属性-用于配置或其他用途。 在属性网格编辑器中最常用的类型是什么?
- 文本 - 数字(byte、float/double、int等) - 颜色
等等。
那么为什么甚至没有像编辑数字这样简单的控件呢?像通用的NumericUpDown控件,允许您输入数字(无文本,无粘贴无效输入),或者根据一些给定的规则(十进制、浮点、最小/最大值)旋转数字? 为什么没有通用的颜色选择器,以便人们在每个应用程序中获得相同的用户体验? 为什么没有标准实现SearchTextBox、BreadCrumb-control或所有这些其他标准控件类型,用户在过去10年中已经习惯了?
(... 但至少他们有时间实现一个通用的启动屏幕 - 因为每个人都知道这会极大地增加用户生产力....)
众所周知的理想是在不同的应用程序中为人们提供相同的用户体验。因此,即使其中一些控件很容易制作-最好也有一个版本适用于不同的应用程序。
我看到互联网上的人们一遍又一遍地尝试做同样的事情。 好吧,微软在Codeplex上启动了一个WPF Toolkit项目,试图实现一些控件,但只是半心半意地做了这件事,并且现在已经完全停止更新(路线图的最后更新日期为2009年3月21日)。
结果是,许多开始WPF项目的人最终花费了大量时间来尝试创建一些通用控件,并感到非常沮丧。
口头禅不是“开发人员,开发人员,开发人员!”吗?
/发泄

这有点争议性。除非你从团队中得到了一个内部决策的消息,否则任何回应都将是纯粹的猜测或主观看法。 - Colin Mackay
WPF toolkit的计划功能列表中包括一个NumericUpDown控件,也许你可以在那里提交一个功能请求来加快它们的进度? - Jonas Van der Aa
正如所提到的,WPF Toolkit已经停止更新了。 "计划中的功能"现在已经有将近2年没有更新了。 - Pygmy
4个回答

2

因为在WPF中制作这些东西非常容易。使用WPF和Silverlight,微软的重点是一个核心框架,使得许多任务(如可样式化控件)变得非常简单。工具比预构建的控件更重要。他们关注的是下一件事,而不是更好的Winforms。


1
+1 因为我认为这是迄今为止最接近真正答案的回答。但尽管在某种程度上我同意你的观点,但我也认为这个问题涉及到这些控件的标准实现。如果每个开发人员、团队或项目都要自己开发,应用程序可能会开始看起来像任何东西。这肯定不会带来积极、可预测的用户体验(不幸的是,我认为对于这个问题的答案是,我们已经在这条路上走得很远了。而我一点也不喜欢它。) - Cody Gray
如果这样做非常容易,那为什么就没有一个能够自由使用、实际上适用于不同类型(byte、int、double)且具有适当掩码和格式的好用的NumericUpDown控件呢?给我提供一个链接,我会告诉你它哪里出了问题。 - Pygmy
但是再次问一句,为什么你会希望人们为这样的核心组件不断重新发明轮子?为什么提供一个通用的闪屏,却没有标准的数字输入/编辑方式?为什么不希望在数字编辑器、颜色选择器、面包屑控件、搜索文本框等基本功能中为用户提供相同的用户体验? - Pygmy
@IUsedToBeAPygmy,请查看此处的NumericUpDown控件:http://wpftoolkit.codeplex.com/wikipage?title=NumericUpDown&referringTitle=Home...有什么问题吗? - basarat
@Basarat - 这并不是一个适当的文本屏蔽(您可以在文本框中轻松输入您的姓名),也不能防止粘贴无效数据。但这不是关于获取一个有效的NumericUpDown实现,而是为什么没有基本/标准实现这样基本的控件,这些控件几乎在每个应用程序中都被使用。 为什么要让人们为这样的东西不断重新发明轮子-只需创建一个专业的标准实现,如果人们需要不同的东西,那么他们可以开始滚动自己的版本。 - Pygmy
1
人们也可以编写自己的组合框,但我很高兴有一个默认实现。 - Led

2
我认为微软和这里的一些回复者忘记了这篇文章最重要的部分:

"众所周知,理想情况是在不同的应用程序中为人们提供相同的用户体验。因此,即使某些控件很容易制作,也更喜欢在不同的应用程序中使用同一个版本。 "

只需在Google图像搜索中搜索“WPF颜色选择器”(http://www.google.nl/images?q=wpf+color+picker) ,您就会看到这个想法被抛弃的情况。

一个WinForms颜色选择器将会给出同样丰富的搜索结果:http://www.google.nl/images?q=winforms+color+picker 一个Swing颜色选择器也是如此:http://www.google.nl/images?q=swing+color+picker 人们总是拥有并且想要更多的控制……WPF为您提供了这一点而不会妨碍您。这就像我们不再使用匈牙利命名法一样……时代在变化……程序员 想要 更多的控制。我也是其中之一……并喜欢WPF。 - basarat
这是因为WinForms也没有标准的颜色选择器 - 所以我的情况也是一样的 :) 我认为,对于被许多应用程序使用的标准控件,应该有一个标准版本。如果你想要更多的控制,那就自己写。但是为什么要强迫每个人每次都重新发明轮子,仅仅因为一个人可能需要更多的控制呢? - Pygmy
好的,Swing确实有http://download.oracle.com/javase/tutorial/uiswing/components/colorchooser.html,但情况并没有得到改善,不是吗 :) http://www.google.nl/images?q=swing+color+picker - basarat
1
那一定是我见过的最丑的颜色选择器 :D - Pygmy

0

这正是我在开始使用WPF时所想的。

但最终,一个NumericUpDown可以很容易地通过自定义用户控件创建,同样,对于您需要的所有控件,您可以在(几乎)没有时间的情况下自己创建它,或者通过搜索在网上找到一些实现,然后仍然可以进行自定义。

我认为他们提供了UI元素的基本实现,并将所有自定义内容留给了开发人员和需要自定义内容的人,如果他们做了一个通用的颜色选择器,也许它就不会有任何人需要的所有功能。


1
我创建了一个基本的NumericUpDown,代码不多,虽然我还没有尝试让它与微调器和掩码文本一起工作=P。事实是,如果有人需要一个控件来显示扑克牌游戏的手牌,可以创建它。显然,微软不会发布基本的“CardHand”用户控件,其他控件也是如此。像NumericUpDown这样的相当基本的控件(已经是Windows Form的一部分)应该已经发布了,我知道,但也许这违反了产品的最终目的。 - BFil
1
当然,一个没有微调器和掩码文本的NumericUpDown并不需要太多代码。这两个功能的良好实现才是一个好的NumericUpDown的关键 :) 我认为卡牌手不是最常用的控件之一。但是,我正在使用的Web浏览器以及我的文本编辑器、编程IDE、Photoshop等都在多个地方使用NumericUpDown控件。 - Pygmy
我的NumericUpDown有一个验证器,用于防止非数字值,并带有一个PreviewInput处理程序、复制粘贴处理程序、MinValue和MaxValue属性等。我将它构建为我在几个小时内理解WPF中用户控件的第一个练习之一,所以,实际上,它并不是那么难。而且我可以在任何地方找到很多实现,它只是一个带有2个按钮的文本框,不是一个UI噩梦=) - BFil
1
感谢您提供的版本。 但是它只支持整型,这使得编写代码非常简单,因为您不需要为浮点/双精度数(“0.04”,防止“0.00.4”等)支持复杂的掩码,字符串格式化等。 有用的数字上下调应该能够使用任何数字类型,使用适当的掩码、格式化等。 - Pygmy
是的,让我们坚持1992年的三个功能就好了,我们永远不需要更多! ;) 你有没有想过文本标记语言和桌面用户界面之间的区别?它们以完全不同的方式使用,具有完全不同的目标和期望,除了HTML相当古老,期望/功能在20年的时间里也会发生变化 :) 所以你仍然告诉我他们确实让人们重新发明轮子,而不是为什么任何人都想让人们重新发明它。 - Pygmy
显示剩余10条评论

0

市面上有很多第三方供应商提供功能强大的自定义控件(编辑器、导航、网格、菜单、属性网格等)。

通常来说,从他们那里购买比重新编写自己的控件更便宜(当然要符合您的需求)。

历史上,微软一直鼓励一个丰富的“基于组件”的生态系统,围绕着他们提供的开箱即用的功能。这一点在使用微软技术进行组件编程(VBX、OCX等)时就已经存在了。这是可以争议的,但这就是策略 :-)


对于更复杂/不太标准的控件,我可以理解。 但是对于大多数应用程序中使用的控件?像“编辑数字”这样的东西?为此付费(大多数第三方控件套件成本> $ 500)对我来说似乎很荒谬。 而且它完全违背了“在应用程序之间保持用户体验相同”的箴言,因为每个实现都将是或看起来略有不同。 - Pygmy
顺便说一句,我想你已经看过 http://wpf.codeplex.com/ 这个微软项目了,它包含了许多额外的功能,其中一些将被纳入下一个 WPF 版本中。 - Simon Mourier
@Cody Gray - 我不确定是这个,因为他提到了2009年2月的日期,而在该网站上,最新的发布日期是2010年2月。此外,http://wpftoolkit.codeplex.com/ 上还有一个“扩展WPF工具包”,我认为这不是微软的 - 它也有一个MaskedTextBox :-) - Simon Mourier
@Simon:那部分的控件是WPF Toolkit,其路线图已经近2年没有更改了,而2年前路线图上的内容仍未实现。WPF Extended Toolkit中的NumericUpDown不支持正确掩码或防止粘贴不正确的数据,Brian也没有计划实现这一点。 - Pygmy
嗯...我需要开展一个低于500美元的组件业务!只是开个玩笑 :-) - Simon Mourier
如果您提供一个专业的简单控件库(没有停靠系统或类似的复杂功能,只是简单的基本控件),售价为50美元,我认为您会卖出很多 :) - Pygmy

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