学silverlight快半个月了,在公司中学习与在学校的学习就是不一样,在学校如果要学习silverlight那当然是先图书馆借一本或自己买一本书然后夸啦啦得看完,接着练习几个题目就差不多了。在公司不一样,公司主要还是任务驱动型的。
在这我说说在公司修改bug过程中走的弯路及一步一步的解决过程。
现在带我的人需要我改一个bug。这个bug是这样子的:在一个DataGrid中遇到特殊数据需要显示特殊的颜色,但是现有系统中出现的问题是刚加载完时颜色能正确地显示,但是当拖动滚动条时颜色就搞乱了。使用过DataGrid的应该都知道,如果直接根据数据值的范围来判断实现以下IvlueConverter接口就肯定能实现指定单元格变色。比如我测试用的代码是:
1、继承IValueConverter接口的类
数据是从数据库里面取出来的,在此也就不在写了。由这些代码即可实现成绩小于60的显示为红色。
但是现在的情况是有两个数据源,一个数据源用于给DataGrid的ItemSource赋值以显示这些数据,另一个数据源是控制信息,该控制信息是一个二维矩阵即是坐标的集合,每一个元素代表一个单元格,现在只要能取到这个单元格那就万事大吉。此时自然想到这样写:
这样指定单元格的颜色就变为红色了,但是当我滑动滚动条时发现颜色乱了。花了很长时间去找原因可就是没找出来,最后还去找替代方案现在新建一个隐藏列,该隐藏列存储的是控制数据源转换后的值,然后根据该值在IVlueConverter接口中实现数据的控制。要这样做的话势必在给DataGrid赋值时得把两个数据源合并为一个,这可不是我愿意的,最后检查了很久终于发现问题所在。真正出错的是我自己的变成习惯,一直以为用了if如果else中不用执行就可以不写了。事实上这次我错了,DataGrid在每次滚动滚动条时都保留了上次单元格的颜色,当你在此滚动时出现颜色的单元格就会发生变化了。后来加上一句
else
{
txt2.Background = new SolidColorBrush(Colors.Transparent);
}
就不会出现这样的错了。我真正写的代码是:
这样就有四个单元格变色而且滑动滚动条颜色不会紊乱。
花了很长时间来改这个bug,故而写下此博文!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。