silverlight中DataGrid单元格变色问题

      学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,故而写下此博文!

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页