WPF 与 Silverlight 的关键区别?

阅读数:5839 2009 年 11 月 16 日

话题:.NET语言 & 开发

当 WPF 和 Silverlight 越来越受到.NET 开发人员重视的时候,两者间的界限也越来越模糊。回顾六月,Wintellect发布了鲜为人知但极其重要的“微软 WPF 和 Silverlight 之异同白皮书”。我们建议 GUI 开发人员要通读全部 69 页,我们会列出主要的观点及其对相关业务范围开发人员的影响。

依赖关系属性是两个平台的重要组成部分,使用PropertyMetadata可代替普通字段来保存属性。Silverlight 仅提供了该类,而 WPF 却有若干子类型可用。

  • UIPropertyMetadata添加了一个标识符,用于决定“在使用了元数据实例的地方,是否应该禁播依赖关系属性的动画”
  • FrameworkPropertyMetadata添加一个标识符来指示影响管道的那些属性,包括控制管理、测量和呈现。它也可用于指示属性是否允许数据绑定以及默认的类型。由于 Silverlight 不支持该类,因此所有的数据绑定在默认情况下都是单向的。

Silverlight 不支持隧道事件。两个平台都支持 Direct 事件和 Bubbling 事件。

WPF 支持多种类型的触发器。一个简单的触发器附加到依赖关系属性后,当触发器条件满足的时候便会自动修改样式。除了简单触发器以外,WPF 也支持可响应路由事件或使用数据绑定的触发器。

Silverlight 使用视觉状态管理器代替触发器。WPF 当前并不提供该技术,但会在 WPF 4.0 中添加。

Silverlight 仅支持若干标记扩展。除了通用的 StaticResource、Binding 和 TemplateBinding 扩展以外,WPF 还添加了 DynamicResource、RelativeSource、x:Type、x:Static 和 x:Array。

有很多键盘和鼠标事件仅在 WPF 中可用。由于为数众多的关系,我们稍后会列出完整列表。

关于 UIElement 类和 IInputElement 接口。当某个控件被禁用的时候,WPF 使用它们来禁用所有的子控件。Silverlight 不提供这种功能,所以开发人员不得不手动遍历控件树。

在通信方面,Silverlight 仅限于 BasicHttpBinding 和 PollingDuplexHttpBinding。当然,WPF 支持所有的绑定。

最后,打印功能在两者之间也完全不同。WPF 可直接打印可视化树而 Silverlight 则依赖浏览器实现。

查看英文原文:WPF vs. Silverlight – What Really is the Difference?