控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

Silverlight3学习笔记2(对于Slider事件问题的处理)

作者:不详 出处:博客园 2010年02月08日 阅读:

终于开始我的代码之旅了。
资料当然是从博客园里找了,发现
Terrylee 的Silverlight2-step-by-step系列还真的入门的好文章,先不管Silverlight的版本问题,拿过来先试试了,好期待!

找个比较综合的小例子一步一步学Silverlight 2系列(3):界面布局 里面发现了诡异的问题
按博主的代码我把该写的代码都用上了,
Code
后台代码为:
一切都OK了,运行发现有空对象引用的异常。怎么可能这些不都是公布可用的代码吗?

无奈还是跟下吧。
发现原来问题出在当前页的InitializeComponent(),里面,看看后面的实现吧,
       
Code
看这个代码的基本意思应该是通过标记_contentLoaded来判断当前页是不是已经载入页面元素了,如果已经完成初始化了,则不再载入,如果没有载入则执行下面的LoadComponent的代码。
按理来说整个载入的过程都是没有什么复杂的,但是问题是当代码执行LoadComponent时,代码走到了后台代码的Slider_ValueChanged事件里面。
我猜想LoadComponent应该是读取了页面上的元素标签来构造当前页面中对象,因为其中对对象设定了Value,结果就执行了ValueChange的事件。
可是实际上从上面代码看页面对象的初始化应该是类似this.PreviewColor = ((System.Windows.Shapes.Rectangle)(this.FindName("PreviewColor")));
的代码完成的。
如果真的是上面的代码完成初始化,那前面我的猜想就不应该存在,如果真的存在那就一定会出现对象还没有初始化就在事件中使用该对象的空对象引用异常的错误。

不知道这个是3.0里面才存在的问题,还是原2.0里面就有,还奇怪!
最后我只能把事件里面的代码重新改造下
1:消除页面代码中事件的部分。(这个只是对Slider控件的事件)
2:在页面代码中对页面的Load添加事件代码
Code
如此改造后一切正常。
最后总结下。
上面的改造方式应该不是唯一的,也不一定完全合理,但是主要解决的根本问题看起来是Silverlight在初始化页面时候也可能会因为页面元素设定值时响应后台的事件代码,且如果事件代码中引用到页面元素的值时就会造成空对象的引用。
所以如果遇到类似情况,改造时只要将页面中的事件放在Loaded事件中加载,应该就可以避免上述问题的发生

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统