在学习WPF时,您发现最难理解的是什么

Ian*_*ose 62 .net wpf

WPF对你有什么影响

  • 找到最难理解的
  • 或被误解为最长的

你是如何理解它到底(请提供链接等).

(我要求这个指导我学习WPF)

cpl*_*tts 94

对不起,这么久了...希望它有用!我要提到的一件事是,这些是让我失望的概念/事物,我不确定如果你刚开始的话,我是否会将它作为列出的研究列表.我会深入阅读一些书籍,阅读很多博客(Josh Smith,WPF博士),总的来说,潜入并在小项目中尝试一下.

核心概念

  • 逻辑和可视树(链接:1)

    了解WPF中的不同树.特别是,理解逻辑树与可视树,以及如何通过数据模板,控件模板等将逻辑树中的元素扩展到可视树中.

  • 依赖属性系统(链接:1,2)

    理解WPF中的整个依赖属性系统比它最初看起来要大得多.当然,很容易创建一个快速依赖属性,然后使用它来授权其他WPF概念,如数据绑定和动画,但随后它开始.

    有正常的依赖属性,然后有附加的依赖属性.有许多不同的方法来注册它们以及一组可以设置的不同元数据选项.

    理解为什么它被称为依赖属性,就此而言,花了我一些时间.也就是说,理解属性的值来自许多不同的源(属性依赖于这些值提供者),并且对于如何设置任何给定时间的最终属性值,存在优先顺序/算法.

  • 路由事件(链接:1,2)

    了解它们如何冒泡,路由或直接.了解您还可以附加路由事件(而不是仅将事件处理程序附加到已路由可视树的事件).

    提示

    Adam Nathan的WPF Unleashed中的第3章是一个很棒的章节,涵盖了这些重要的新概念,你应该阅读,在项目上工作,然后再读一遍.

    WPF博士的片段是了解依赖属性,路由事件和命令的好方法.

图形概念(链接:1)

  • 分辨率无关(链接:1,2)

    WPF带来了resoultion独立性的所有好处(您可以使用设备独立像素指定所有内容),但这也会带来一些您需要解决的问题.最值得注意的是,通过利用像素捕捉,设置指南等,在您希望它们时,让事情看起来更加清晰.

  • 保留模式与立即模式

    WPF具有保留模式绘图子系统,这意味着它会跟踪绘图指令并将其缓存以供以后使用.如果您正在尝试构建具有大量视觉效果的内容,这可能会导致性能问题.

  • 控件,元素,视觉效果(链接:1)

    了解WPF层次结构中的每个内容为您做什么,并了解它带来的性能.特别是,你是否使用了一个可以重新模仿,重新设计等等的控件......或者你需要一些超轻的控件(比如针对可视层进行编程),以便你可以快速而快速地驱动它.

    提示

    Chris Sells和Ian Griffiths在他们的编程WPF书的后面有一个很好的附录,它讨论了WPF API中的不同类型,它们适合层次结构,以及它们带来了什么价值.

WPF模式

  • Model-View-ViewModel(MVVM)模式(链接:1)

    已经提到MVVM模式可以帮助人们开始以WPF方式做事.我完全同意.您可以开始将数据转换为可视化(通过数据模板),而不是使用数据填充控件.

  • 附加属性行为模式(链接:1,2,3)

    WPF可以像其他API一样可扩展.利用附加属性,您可以以非常优雅的方式构建其他行为,并且您认为可能会遇到困难.

WPF!= Windows窗体

我知道有人已经提到了这一点,但我想强调同意.有许多新的和不同的概念,你真的必须忘掉一些事情并从一个完全不同的角度解决问题.例如,Windows Forms是立即模式绘图子系统,而WPF是保留模式(上图).

在WPF中做很多很多种方法

这是一个有趣的事情,但是因为有很多方法可以在WPF中做一些事情,所以它几乎瘫痪了.哪种方式是正确的做事方式?是这个吗?是那个吗?我不得不害怕以错误的方式去做,只是跳进去,从错误中吸取教训.


use*_*116 11

WPF不是WinForms.大多数(如果不是全部)用于在WinForms中完成任务的常用策略是WPF中错误(或效率最低)的方式.如果采用WinForms思维模式,命令,依赖属性,绑定,模板等等都不会有用.

目前,我们正在开发一个大型可视化应用程序.作为经验丰富的WinForms程序员,我们在多维数据显示上的第一次削减预先计算了数千个视觉元素.滑块将使用回调遍历可视元素的尺寸.除初始设置外,不会加载任何数据.这表现非常糟糕.

使用数据转换器切换到成千上万的绑定,只需几百个可视元素,即可动态加载和重新计算数据.这导致性能提高了一个数量级.几乎不可想象的是,成千上万的绑定比数千个预先计算的可视元素更快,但WPF就是这种情况.

" 从WinForm到WPF:快速参考指南 "可能很有用.

  • 看似显而易见,但很难改变你的心态.+1. (2认同)

Tho*_*que 10

我说我开始学习WPF时最难的一点是:

  • 样式和模板:我花了一段时间来了解何时使用它们以及它们如何相互作用
  • 复杂的绑定RelativeSource,转换器......
  • 触发器:我有时会对我应该使用DataTriggers,Triggers或EventTriggers的位置感到困惑...
  • 依赖属性和附加属性的机制
  • 路由事件的工作方式

如果您有使用Windows窗体的经验,那么有很多小事情一开始看起来很难.你需要忘掉很多东西,然后切换到一个非常不同的UI结构的心理模型.

起初我开始编写代码,就像我在Windows Forms中编写的一样,有许多代码隐藏,但这绝对不是正确的方法.MVVM模式真的帮助我进入WPF"哲学"......

我学习WPF的主要文档来源当然是MSDN,如果你知道如何看,你可以找到大多数答案.我还在以下博客上学到了很多东西:


Ash*_*Ash 6

依赖属性需要一段时间.这是一篇很好的文章,一篇帮助我了解这个新概念.

第二篇文章包含以下段落,它真正澄清了我的一些问题.

Dependency Properties系统的一个关键值是能够构建属性,每次属性值发生更改时,这些属性会自动通知任何已注册的相关方.这种免费,无痛且自动的观察器模式实现非常强大,并且大大减轻了客户端程序员的负担(事实上,数据绑定系统依赖于它!).

更一般地说,我还发现以前的Web开发经验(特别是浏览器UI)在"获取"WPF时非常有用.与仅使用过Windows Forms或其他富客户端应用程序的人相比,它更多地是关于它允许您带到WPF的思维模式.

来自网络世界的一些更明显的相似之处是CSS,流动布局,jQuery动画,事件冒泡/路由以及对广泛的浏览器和DHTML对象模型的熟悉.