(本文要感谢Microsoft公司的Neil Ni的帮助。)
其实这个是Microsoft在设计上的一个考虑。由于这些界面元素主要目的是呈现(对我这个控件来说,取值通过属性CheckedValues,如果您试图遍历这些子控件,可能会发现一些子控件甚至都没有加入Visual Tree),如果ListBox里面Item很多的话,一下子都拿出来就可能会影响性能。
如果您一定需要让所有Item都工作顺利,且不介意性能上面的些许损失的话,那么请您为该控件加上VirtualizingStackPanel.IsVirtualizing="False"这个属性。这样一来,就能顺利解决这个问题了。
其它代码都没有任何改动,请参考本文上面提到的第二十三篇文章。
其实这个是Microsoft在设计上的一个考虑。由于这些界面元素主要目的是呈现(对我这个控件来说,取值通过属性CheckedValues,如果您试图遍历这些子控件,可能会发现一些子控件甚至都没有加入Visual Tree),如果ListBox里面Item很多的话,一下子都拿出来就可能会影响性能。
如果您一定需要让所有Item都工作顺利,且不介意性能上面的些许损失的话,那么请您为该控件加上VirtualizingStackPanel.IsVirtualizing="False"这个属性。这样一来,就能顺利解决这个问题了。
1
<
common
:
CheckListBox
Name
="chkTest"
ItemsSource
="{
Binding
}"
ItemValuePath
="FunctionId"
ItemContentPath
="FunctionName"
VirtualizingStackPanel.IsVirtualizing
="False"
Height
="100"
Width
="100" />
本文转自 Eallies 51CTO博客,原文链接:http://blog.51cto.com/eallies/79000,如需转载请自行联系原作者