My Silverlight系列(7)—— Control的Loaded事件与OnApplyTemplate
2009-04-25 12:04:42 来源:WEB开发网最终运行时截张VS的图:
可能到了这大家还没怎么看懂这些代码和这个图说明了什么,那么我解释一下。首先,Page类的OnApplayTemplate()方法没有执行,是因为它没有Template;然后,从Button、CheckBox以及Page的Loaded事件来看,CheckBox和Button作为Page的子控件,先Load完毕,而作为Parent的Page要更晚一些Load;再然后,Button和CheckBox的Loaded事件都比ApplyTemplate早;最后,作为Button的Content的CheckBox加载最晚,而且它ApplyTemplate要比Loaded早。
这个最后一条,就是为什么我说Loaded与ApplyTemplate的早晚不一定的原因。从上述的先后顺序上,我们至少可以看出来三点:第一,子控件总是先于父控件触发Loaded事件的;第二,应用了ContentPresender的控件,它的Content如果也是一个控件,那么这个控件是要比父控件Loaded晚的;第三,第二种情况下,Content那个控件的ApplyTemplate要比Loaded早,而不在那种情况下,控件的Loaded事件是比ApplyTemplate早的。
有些事情微软做得总是让人匪夷所思,比如说ApplyTemplate居然比Loaded晚这个事情,我在WPF上测了同样的东西,ApplyTemplate总是要比Loaded早的,这也合情合理,应用完模版之后再告诉别人我已经加载完了,这是正常人都有的逻辑,但是在Silverlight中,大部分情况都是反过来的。我当然不相信设计Silverlight那哥们在写架构的时候把调用顺序给弄倒了,微软这么做总是有它的理由的,只是理由是什么呢?是不是桌面上和浏览器上绘图会有区别呢?这些我就不得而知了,没准只有微软写OS和IE内核的人才知道……
Tags:My Silverlight 系列
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接