<分区>
只要我编程,我总是使用 MS 技术来完成。有 DOS、MFC、VB6,然后是带有 WinForms 的 .net,现在是 WPF。
在所有这些技术中,GUI 的东西总是或多或少是一样的,因为它基于 Win32(DOS 除外)。现在有了 WPF,一切都完全改变了。 MS 引入了许多新的可能性,首先是构建 UI、无外观控件、动画等的声明方式。我非常喜欢这种新的 UI 技术,也喜欢它背后的基础知识(DependencyProperty-System、RoutedEvents 等等)。
但我不知道的是,因为我一直使用 MS 技术,如果整个构造是 MS 特定的发明,或者这些东西只是对最先进和使用的技术和模式的良好汇编在许多其他现代环境中。
是否有一些关于显示链接和常见模式的现代 UI 技术比较的信息?
如果您学习图形技术,您会发现 WPF 并不是那么出色 - 它是现代硬件和现代 Windows 上一些非常成熟的概念的实现。为了说明这一点,我书架上的一本 1991 年打印的旧书“Computer Graphics, Principles and Practice”包含了许多构建 WPF 的想法。
WPF 与 GDI(Windows 图形系统的前身)最根本的区别可能是 WPF 是一个保留模式图形系统,而 GDI 是非保留模式。这意味着在 WPF 中,有一个可视树和数据结构,代表要查看的视觉场景,定期进行裁剪和光栅化,并且该数据结构始终保留在内存中,由 WPF 本身管理。
一旦理解了这一点,即 WPF 的核心是表示场景的树结构,就会发现其余部分是建立在处理成熟 3D 显示系统 (DirectX) 之上的视觉树光栅化细节的原则之上的.线程的分层 (DispatchObject
)、数据绑定(bind)机制 (DependencyObject
) 以及布局、输入、焦点、事件 (UIElement
) 的 UI 习语) 和样式 (FrameworkElement
) 都是 Win32 或其他 UI 结构中思想的自然发展。举一个后者的例子:尽管 Win32 中不存在像 DependencyObject
这样的东西,但流行的 3D 工具 (Maya) 将 3D 场景表示为有向无环图,它有一个类似的子系统,其中节点具有属性,并且当属性更新时,值通过图中的节点连接推送,并且对该属性感兴趣的所有节点都会收到新值的通知。由此可以看出,一旦您拥有中央数据结构(树或图),在新功能上分层就是一个直接的软件工程问题。
综上所述,应该认识到 WPF 是什么:一个成熟的果实,体现了在构建用户界面和图形技术方面数十年的研究、试验和错误,以及构建富客户端应用程序的坚实基础 future 。