silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了修复WPF Silverlight ListBox控件的一个Bug大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

  先来看这样演示程序。在修复前,选择重复的数字会导致选中状态混乱,出现多个数字莫名其妙被选中的状况。     刨根问题,此问题最终定位到如下代码(WPF 项目,Silverlight项目类似):   01 /*   02 internal bool SELEct(object o, bool assumeInItemsCollection); 03 04 Declaring Type: Syst
@H_944_10@

  先来看这样演示程序。在修复前,选择重复的数字会导致选中状态混乱,出现多个数字莫名其妙被选中的状况。

 

修复WPF Silverlight ListBox控件的一个Bug


  刨根问题,此问题最终定位到如下代码(WPF 项目,Silverlight项目类似):

 

01@H_801_39@ @H_944_43@/* @H_801_39@

 

02@H_801_39@ @H_944_43@internal bool SELEct(object o,bool assumeInItemsCollection); @H_801_39@
03@H_801_39@
04@H_801_39@ @H_944_43@Declaring Type: System.Windows.Controls.Primitives.SELEctor+SELEctionChanger @H_801_39@
05@H_801_39@ @H_944_43@Assembly: PresentationFramework,Version=4.0.0.0 @H_801_39@
06@H_801_39@ @H_944_43@*/@H_801_39@
07@H_801_39@ internal@H_801_39@ bool@H_801_39@ SELEct(@H_801_39@object@H_801_39@ o,@H_801_39@bool@H_801_39@ assumeInItemsCollection) @H_801_39@
08@H_801_39@ { @H_801_39@
09@H_801_39@ if@H_801_39@ (!SELEctor.ItemGetIsSELEctable(o)) @H_801_39@return@H_801_39@ false@H_801_39@; @H_801_39@
10@H_801_39@ if@H_801_39@ (!assumeInItemsCollection && !@H_801_39@this@H_801_39@._owner.Items.Contains(o)) @H_801_39@
11@H_801_39@ { @H_801_39@
12@H_801_39@ if@H_801_39@ (!@H_801_39@this@H_801_39@._toDeferSELEct.Contains(o)) @H_801_39@this@H_801_39@._toDeferSELEct.Add(o); @H_801_39@
13@H_801_39@ return@H_801_39@ false@H_801_39@; @H_801_39@
14@H_801_39@ } @H_801_39@
15@H_801_39@ if@H_801_39@ (!@H_801_39@this@H_801_39@._toUnSELEct.Remove(o)) @H_801_39@
16@H_801_39@ { @H_801_39@
17@H_801_39@ if@H_801_39@ (@H_801_39@this@H_801_39@._owner._SELEctedItems.Contains(o)) @H_801_39@return@H_801_39@ false@H_801_39@; @H_801_39@
18@H_801_39@ if@H_801_39@ (@H_801_39@this@H_801_39@._toSELEct.Contains(o)) @H_801_39@return@H_801_39@ false@H_801_39@; @H_801_39@
19@H_801_39@ if@H_801_39@ (!@H_801_39@this@H_801_39@._owner.CanSELEctMultiple && @H_801_39@this@H_801_39@._toSELEct.Count > 0) @H_801_39@
20@H_801_39@ { @H_801_39@
21@H_801_39@ foreach@H_801_39@ (@H_801_39@object@H_801_39@ obj2 @H_801_39@in@H_801_39@ (IEnumerablE) @H_801_39@this@H_801_39@._toSELEct) @H_801_39@
22@H_801_39@ { @H_801_39@
23@H_801_39@ this@H_801_39@._owner.ItemSetIsSELEcted(obj2,@H_801_39@false@H_801_39@); @H_801_39@
24@H_801_39@ } @H_801_39@
25@H_801_39@ this@H_801_39@._toSELEct.Clear(); @H_801_39@
26@H_801_39@ } @H_801_39@
27@H_801_39@ this@H_801_39@._toSELEct.Add(o); @H_801_39@
28@H_801_39@ } @H_801_39@
29@H_801_39@ return@H_801_39@ true@H_801_39@; @H_801_39@
30@H_801_39@ }@H_801_39@

  由于使用的是Items.Contains(o)判断,所以会导致值类型的重复数据判断出错。当然修复此问题的思想就是把值类型转换为引用类型。

  创建如下代码

01@H_801_39@ public@H_801_39@ class@H_801_39@ WrapObject<T> @H_801_39@

 

02@H_801_39@ { @H_801_39@
03@H_801_39@ private@H_801_39@ T _obj; @H_801_39@
04@H_801_39@  
05@H_801_39@ public@H_801_39@ WrapObject(T o) @H_801_39@
06@H_801_39@ { @H_801_39@
07@H_801_39@ _obj = o; @H_801_39@
08@H_801_39@ } @H_801_39@
09@H_801_39@  
10@H_801_39@ public@H_801_39@ static@H_801_39@ implicit@H_801_39@ operator@H_801_39@ WrapObject<T>(T o) @H_801_39@
11@H_801_39@ { @H_801_39@
12@H_801_39@ return@H_801_39@ new@H_801_39@ WrapObject<T>(o); @H_801_39@
13@H_801_39@ } @H_801_39@
14@H_801_39@  
15@H_801_39@ public@H_801_39@ static@H_801_39@ explicit@H_801_39@ operator@H_801_39@ T(WrapObject<T> o) @H_801_39@
16@H_801_39@ { @H_801_39@
17@H_801_39@ return@H_801_39@ o._obj; @H_801_39@
18@H_801_39@ } @H_801_39@
19@H_801_39@  
20@H_801_39@ public@H_801_39@ T UnWrap() @H_801_39@
21@H_801_39@ { @H_801_39@
22@H_801_39@ return@H_801_39@ _obj; @H_801_39@
23@H_801_39@ } @H_801_39@
24@H_801_39@  
25@H_801_39@ public@H_801_39@ override@H_801_39@ String@H_801_39@ ToString() @H_801_39@
26@H_801_39@ { @H_801_39@
27@H_801_39@ return@H_801_39@ _obj == @H_801_39@null@H_801_39@ ? @H_801_39@null@H_801_39@ : _obj.ToString(); @H_801_39@
28@H_801_39@ } @H_801_39@
29@H_801_39@ }@H_801_39@

  绑定方法修改

listBox2.Itemssource = @H_801_39@new@H_801_39@ WrapObject<@H_801_39@int@H_801_39@>[] { 1,2,3,4,5,6,1,6 };@H_801_39@

 

  此问题到此解决

本文来自Aimeast的博客,原文地址:http://www.cnblogs.com/Aimeast/archive/2011/05/11/2043281.html

大佬总结

以上是大佬教程为你收集整理的修复WPF Silverlight ListBox控件的一个Bug全部内容,希望文章能够帮你解决修复WPF Silverlight ListBox控件的一个Bug所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。